Je suis coincé avec un problème lors du test de mes contrôleurs avec RSpec - l'appel response.body renvoie toujours une chaîne vide. Dans le navigateur, tout s'affiche correctement et les tests de fonctionnalité du concombre semblent bien faire les choses, mais RSpec échoue à chaque fois.
D'autres attentes sur l'objet réponse, telles que response.should render_template('index')
passent sans aucun problème.
Avez-vous déjà rencontré ce problème auparavant? Peut-être que la réponse html peut être obtenue d'une autre manière?
Quant aux versions, Rails 2.1.0, RSpec 1.2.7.
Par défaut, rspec-Rails pirate en Rails to l'empêche de réellement rendre les modèles de vue. Vous ne devez tester que le le comportement de vos actions et les filtres de vos tests de contrôleur, pas le résultat du rendu de modèle - c'est à cela que servent les spécifications d'affichage.
Cependant, si vous souhaitez que vos spécifications de contrôleur rendent les modèles comme le ferait normalement l'application, utilisez le render_views
directive:
describe YourController do
render_views
...
end
RSpec 2+: si vous souhaitez vérifier de bout en bout - l'URL du corps de la réponse - utilisez un spécification de la demande au lieu d'un spécification du contrôleur .
Comme j'ai travaillé avec un problème similaire (qui m'a amené à cette question), il m'est venu à l'esprit qu'il existe différentes façons d'écorcher le même chat. En d'autres termes, plutôt que de vérifier le corps du texte, vous pourrez peut-être vérifier le contenu du flash.
response.body.should =~ /Invalid email or password/
pourrait être une vérification équivalente à:
flash[:alert].should == "Invalid email or password"
Pour moi, ce dernier semble un peu plus flexible car il fonctionnera dans les deux sens, mais il peut ne pas être approprié dans tous les cas.
À votre santé,
John
Par défaut, la configuration RSpec-Rails désactive le rendu des modèles pour les spécifications du contrôleur
L'une des façons de résoudre ce problème consiste à activer la fonction render_views
réglage dans votre Rails_helper.rb
fichier. De cette façon, vous le rendez capable de fonctionner globalement dans tous vos tests.
RSpec.configure do |config|
config.render_views
end
Ou utilisez la déclaration render_views d'un groupe individuel:
describe User do
render_views
end
Vous pouvez en savoir plus à ce sujet ici .