2009-02-06 16 views
3

J'essaie de comprendre pourquoi ce test échoue. (Je suis un peu nouveau pour tester.) J'utilise le framework de test Rails intégré avec l'ajout de la gemme Shoulda.Pourquoi le test du contrôleur Rails échoue-t-il?

Le test:

require 'shoulda' 

context "on GET to :new" do 

    setup do 
    get(:new) 
    end 

    should_render_template :new 
    should_not_set_the_flash 

end 

ne réussit pas:

1) Failure: 
test: on GET to :new should render template :new. (SessionsControllerTest) 
[/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/controller /macros.rb:220:in `__bind_1233882600_699194' 
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `call' 
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `test: on GET to :new should render template :new. ' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run']: 
expecting <"new"> but rendering with <""> 

2 tests, 2 assertions, 1 failures, 0 errors 

Mais si je le lance sur la console avec app.get '/sessions/new' il fonctionne très bien sans erreur.

Et le modèle "new" s'affiche comme prévu dans le navigateur.

J'utilise Haml. Peut-être que cela cause un problème. Mon modèle est appelé "new.html.haml".

Répondre

8

L'échec indique qu'aucun modèle n'a été rendu. Essayez de vous assurer que vous n'êtes pas redirigé avec

should_respond_with :success 

et faire valoir le contenu du @ response.body juste pour voir ce qui a été renvoyé

# This will fail but should give you some clue about what was sent back. 
should "sent something back in the body" do 
    assert_match 'boohooo', @response.body 
end 

Vous pouvez également faire valoir un modèle spécifique, donc Vous pouvez également essayer:

should_render_template "new.html.haml" 

Cependant, je ne pense pas que HAML soit la cause de votre problème.

+0

Merci. L'appel à assert_match que vous avez suggéré a résolu. J'avais oublié un filtre avant qui gâchait les choses. – Ethan

0

J'avais un problème similaire avec Shoulda, Clearance et Rails 2.3.2. Je pense que j'ai résolu le problème en modifiant comment shoulda et clearance utilisent 'assert_template'. Apparemment, il y a un bug ouvert dans Rails lié à cela.

S'il vous plaît voir ce fil pour plus d'informations et mon diff des changements (une ligne de changement à la fois dans Clearance et Shoulda).

http://groups.google.com/group/shoulda/browse_thread/thread/8c0a66c80ff4fd76