8
votes

Sessions de test dans les rails 3 avec RSPEC & Capybara

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).

Cependant, les sessions ne semblent pas être persistées dans mes tests / demandes / demandes / d'intégration.

Mes spec: /rspec/request/users_spec.rb xxx

retours: xxx

à 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).

Si j'essaie de mettre Session.Inspect, il échoue comme un objet nul.

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]


2 commentaires

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.


3 Réponses :


6
votes

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 .

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.


0 commentaires

1
votes

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 : email et : mot de passe et j'aurais dû utiliser des chaînes à la place ( "email" et "mot de passe ").

En d'autres termes, essayez de changer ceci: xxx

à ceci: xxx


0 commentaires

3
votes

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> xxx pré>

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


0 commentaires