web-dev-qa-db-fra.com

Test du contrôleur RSpec - réponse vierge.

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.

96
Toms Mikoss

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
181
mislav

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 .

3
Thomas

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

2
John Lockwood

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 .

1
Nesha Zoric