Как использовать `assigns` с Factory Girl - PullRequest
1 голос
/ 15 июня 2011

Hiho,

У меня есть следующий тест:

  test "should annoy Chuck Norris" do
    son = Factory.build(:son)
    assert_difference('Son.count') do
      post :create, son: { asset: son.asset, chuck_id: son.chuck }
    end

    assert_redirected_to chuck_path(assigns(son.chuck))
    assert_equal 'The world has been destroyed...', flash[:notice]
  end

assigns(son.chuck) не работает, когда я пытаюсь son.chuck, он работает, но после запуска всех моих тестови при создании некоторых Chucks, Factory.build(:son) создается Chuck с идентификатором 12, а assert_redirected_to отправляют идентификатор 1.В результате следующая ошибка:

Expected response to be a redirect to <http://test.host/chucks/12> but was a redirect to <http://test.host/chucks/1>
          /Users/edison/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.1.0.rc4/lib/action_dispatch/testing/assertions/response.rb:67:in `assert_redirected_to'

Так как я могу получить правильный Chuck.id?

1 Ответ

2 голосов
/ 15 июня 2011

Я думаю, что вы хотите использовать assigns(:chuck).son.

Аргумент присваивания должен соответствовать имени переменной в контроллере.Другими словами, предполагая, что у вас @chuck.son в контроллере, вы должны использовать assigns(:chuck).son.Обратите внимание, что аргумент соответствует тому, что идет сразу после символа @.

...