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
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top