J'essaie d'écrire des tests d'intégration avec RSPEC, Factory_girl & Capybara. J'ai aussi un concombre installé, mais je ne l'utilise pas (à ma connaissance).
Je veux fondamentalement à prépopuler la DB avec mon utilisateur, puis allez à ma page d'accueil et essayez de vous connecter. Il devrait rediriger vers user_path (@user). P>
Cependant, les sessions ne semblent pas être persistées dans mes tests / demandes / demandes / d'intégration. p>
Mes spec: /rspec/request/users_spec.rb p> retours: p> à la place, il redirige vers mon s'il vous plaît - ce qui devrait se produire si le login échoue pour une raison quelconque (ou si la session [: user_id] n'est pas définie). p> Si j'essaie de mettre Session.Inspect, il échoue comme un objet nul. p> Si j'essaie de le faire dans Les tests du contrôleur (/rspec/controls/sesstions_spec.rb), je peux accéder à la session sans problème, et je peux appeler la session [: user_id] p> p>
3 Réponses :
Si vous utilisez du congé, vous devez inclure Warden :: Test :: Helpers (juste après que l'exigence de Spec_Helper soit un bon endroit) comme indiqué sur dans le wiki du gardien . p>
L'appel à la session retourne nul car Capybara ne lui fournit pas accès lors de l'exécution d'un test d'intégration. P>
Vous avez probablement passé de cela, mais je me débattais avec la même question. S'avère que c'était une question de syntaxe. J'utilisais des symboles pour En d'autres termes, essayez de changer ceci: p> à ceci: p> : email code> et
: mot de passe code> et j'aurais dû utiliser des chaînes à la place (
"email" code> et
"mot de passe " code>).
J'ai les mêmes problèmes et bien que cela puisse remplir un formulaire, une option pour certains, je devais rouler ma propre authentification Ruby parce que j'utilisais un système d'authentification tiers (Janrain à être exact) ... dans mon TESTS J'ai fini par utiliser quelque chose comme ceci:
Voici ce que j'ai dans ma spécification / support / test_helpers_and_stuff.rb p> puis dans ma demande de demande, avec capybara et SELÉNIUM, j'ai fait ce qui suit: P> describe "Giveaway Promotion" do
context "Story: A fan participates in a giveaway", js: :selenium do
context "as a signed in user" do
before :each do
@user = Factory(:user)
request_signin_as @user
end
it "should be able to participate as an already signed in user" do
visit giveaway_path
....
end
end
end
end
Je ne sais pas si cela est associé, mais vous ne devriez pas être en mesure d'obtenir le mot de passe d'un utilisateur en tapant @ user.password. Ceci est une vulnérabilité de sécurité dans votre application. Stockez-vous les mots de passe à l'aide de texte brut?
Ce n'est pas lié, et ce n'est probablement pas une vulnérabilité de sécurité. L'appel à #Password ne renvoie qu'un mot de passe car il est défini dans la variable d'instance par usine. Il est probable qu'il utilise un congé ou quelque chose de similaire qui ne persiste pas l'attribut de mot de passe à la DB dans le texte clair, et il ne serait donc pas disponible.