我有一个带有关联的模型,我在控制器中为嵌套表单构建
def edit
@trans_op = TransportOperator.find params[:id]
@trans_op.coverages.build
end
如何测试@trans_op.coverages.build
行是否存在?
describe "GET edit" do
let!(:trans_op){ Factory :trans_op }
it "should be a success" do
get :edit, id: trans_op
response.should be_success
end
# this test needs to be fixed
it "should build an empty coverage if there are none" do
get :edit, id: trans_op
# ???
end
end
我试过嘲笑:
it "should build an empty coverage if there are none" do
trans_op.coverages.should_receive(:build)
get :edit, id: trans_op
end
1) TransportOperatorsController GET edit should add an empty coverage if there are none
Failure/Error: Unable to find matching line from backtrace
([]).build(any args)
expected: 1 time
received: 0 times
并计算
it "should build an empty coverage if there are none" do
get :edit, id: trans_op
trans_op.coverages.count.should == 1
end
故障:
1) TransportOperatorsController GET edit should add an empty coverage if there are none
Failure/Error: trans_op.coverages.count.should == 1
expected: 1
got: 0 (using ==)
答案 0 :(得分:1)
您可以在规范中通过assigns
访问控制器变量。例如,这可能会起到作用:
it "should build an empty coverage if there are none" do
get :edit, id: trans_op
assigns(:transop).should == trans_op
assigns(:transop).coverages.should have(1).item
end
请参阅http://rubydoc.info/gems/rspec-rails/2.8.1/file/README.md#assigns