测试相关模型已建立?

时间:2012-01-17 17:06:20

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec2

我有一个带有关联的模型,我在控制器中为嵌套表单构建

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 ==)

1 个答案:

答案 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