Rails: Lors du test de contrôleurs avec RSpec, comment puis-je les empêcher de redirection?
-
22-09-2019 - |
Question
J'ai des méthodes de contrôleur qui ressemblent à ceci:
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 étrange se passe avec tous mes contrôleurs. Comment puis-je arrêter cette redirection de se produire, afin que je puisse exécuter des contrôles sur le corps de la réponse?
Merci!
----------------------- EDIT:
Une 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
La solution
Changer votre affirmation d'être
response.should be_redirect
Au moins, si elle est faire la bonne chose:)
Autres conseils
Je suis confus pourquoi votre sortie de test dit 'ApiController appelant la méthode test () ... lorsque votre exemple semble être pour TestController. J'ai couru quelques exemples de mes propres et je semble obtenir des résultats corrects. Je vous conseille d'essayer le débogueur Ruby (gem-debug rubis) pour diagnostiquer ce sujet. De cette façon, vous pouvez confirmer que le code approprié est appelé ainsi que de vérifier de manière interactive les valeurs.
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.
Pour l'essentiel, essayer affirmant que le contrôleur a tenté une redirection.
@response.should be_redirect