Проверить, что связанная модель была построена? - PullRequest
0 голосов
/ 17 января 2012

У меня есть модель с ассоциацией, которую я строю в контроллере для вложенной формы

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 Ответ

1 голос
/ 17 января 2012

Вы можете получить доступ к переменным контроллера через 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

...