Test du contrôleur RSpec – réponse vide.body

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 est rendu correctement, et les tests des fonctionnalités du concombre semblent bien fonctionner, mais RSpec échoue à chaque fois.

Les autres attentes sur l’object de réponse, telles que response.should render_template('index') , ne posent aucun problème.

L’un de vous a-t-il déjà rencontré ce problème? Peut-être que la réponse HTML peut être obtenue d’une autre manière?

Pour les versions, Rails 2.1.0, RSpec 1.2.7.

Par défaut, rspec-rails pirate les Rails pour l’ empêcher de rendre des modèles de vue. Vous ne devriez tester que le comportement de vos actions et filtrer les tests de votre contrôleur, et non le résultat du rendu du modèle.

Toutefois, si vous souhaitez que les modèles de rendu de vos spécifications de contrôleur render_views l’application, utilisez la directive render_views :

 describe YourController do render_views ... end 

Comme je travaillais sur un problème similaire (cela m’a amené à cette question), il m’a semblé qu’il existe différentes manières d’habiller 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 un chèque équivalent à:

 flash[:alert].should == "Invalid email or password" 

Pour moi, cette dernière semble un peu plus flexible car elle fonctionnera dans un sens ou dans l’autre, mais cela peut ne pas être approprié dans tous les cas.

À votre santé,

John

RSpec 2+: Si vous souhaitez vérifier de bout en bout – URL vers le corps de la réponse – utilisez une spécification de requête au lieu d’une spécification de contrôleur .

Par défaut, la configuration RSpec-rails désactive le rendu des modèles pour les spécifications de contrôleur

Un des moyens de résoudre ce problème est de vous assurer d’activer le paramètre render_views dans votre fichier rails_helper.rb . De cette manière, vous le rendez capable de travailler 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 .