2011-06-15 4 views
1

Hiho,Comment utiliser `assigns` avec Factory Girl

Je le test suivant:

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) travail doens't, lorsque je tente son.chuck, cela fonctionne, mais après l'exécution de tout mon tests et la création de Chucks, Factory.build(:son) a créé un Chuck avec l'ID 12 et les assert_redirected_to envoient l'ID 1. Résultant l'erreur suivante:

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' 

Alors, comment puis-je obtenir la Chuck.id correcte?

Répondre

2

Je pense que ce que vous cherchez à utiliser est assigns(:chuck).son.

L'argument à affecter doit correspondre au nom de la variable dans le contrôleur. En d'autres termes, en supposant que vous avez @chuck.son dans le contrôleur, vous devez utiliser assigns(:chuck).son. Notez comment l'argument correspond à ce qui vient juste après le symbole @.

+0

Eh oui, vous êtes le maître! ;] –

+0

'assigns' n'a rien à voir avec Factory Girl. Je suis stupide! –

Questions connexes