2010-01-26 11 views
1

J'ai des méthodes de contrôleur qui ressemblent à ceci:Rails: Lors du test de contrôleurs avec RSpec, comment les empêcher de rediriger?

class TestController < ApplicationController 
    def testAction 
    render :json => { 'success'=>1 }.to_json 
    end 
end 

Quand je charge cette action dans le navigateur, je reçois ce que je pense: {"success":1}

Lors du test avec RSpec, cependant, response.body me donne '<html><body>You are being <a href="https://test.host/test/testAction">redirected</a>.</body></html>'

J'ai remarqué que cette redirection bizarre se produit avec tous mes contrôleurs. Comment puis-je empêcher cette redirection de se produire, afin que je puisse contrôler le corps de la réponse?

Merci!

----------------------- EDIT:

Toute idée pourquoi l'échec du test suivant se passe?

# app/controllers/test_controller.rb 
def test 
    flash[:notice] = 'test' 
end 

# spec/controllers/test_controller_spec.rb 
describe TestController, "calling the test() method" do 
    it "should set the flash notice" do 
    put :test 
    flash[:notice].should_not be_blank 
    end 
end 

# result 
'TestController calling the test() method should set the flash notice' FAILED 
expected blank? to return false, got true 

Répondre

0

Changer votre affirmation être

response.should be_redirect 

Au moins, si elle est faire la bonne chose :)

-1

Par définition, vous effectuez un test unitaire sur le contrôleur et donc ne devrait pas essayer de voir ce qui est dans la réponse, mais seulement que l'action correcte est arrivé et a fait tout ce qu'il était censé faire. Tester le contenu de la réponse est un travail pour un test d'intégration comme le concombre. Essentiellement, essayez d'affirmer que le contrôleur a tenté une redirection.

@response.should be_redirect 
+0

Merci pour la réponse. C'est logique, mais j'ai créé un test plus simple pour voir si je pouvais faire fonctionner les choses. Je l'ai édité au fond de ma question. – NudeCanalTroll

+0

ce n'est pas correct, il est très typique dans les tests du contrôleur pour affirmer le résultat d'une réponse .. –

0

Je suis confus pourquoi votre sortie de test dit 'ApiController appelant la méthode test() ... lorsque votre exemple semble être pour TestController. J'ai exécuté quelques exemples de mon propre et je semble obtenir les bons résultats. Je suggère d'essayer le débogueur Ruby (gem ruby-debug) pour diagnostiquer ceci. De cette façon, vous pouvez confirmer que le code approprié est appelé ainsi que vérifier interactivement les valeurs.

+0

Oops, la sortie est en train de dire TestController, pas ApiController. C'était une erreur de copier-coller de ma part, mon erreur. – NudeCanalTroll

+0

OK, mais si je recréais exactement ce que vous avez ci-dessus, le test passe pour moi. Pour info, je cours sous Ruby v1.8.7/Rails 2.3.4/rspec 1.2.9 – Warren