2011-06-15 66 views
1

HIHO,如何使用`assigns`與工廠女孩

我有以下測試:運行

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與編號12assert_redirected_to發送ID 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

回答

2

我認爲你要使用的是assigns(:chuck).son

要分配的參數必須與控制器中的變量名稱匹配。換句話說,假設你在控制器中有@chuck.son,你應該使用assigns(:chuck).son。請注意參數如何對應於@符號後面的內容。

+0

Yeeep,你是主人! ;] – 2011-06-15 20:18:12

+0

'assigns'與Factory Girl沒有任何關係。我很笨! – 2011-06-15 20:19:59