8
votes

Test d'intégration des rails avec le gemme de congise

Je veux écrire un test d'intégration des rails (avec actionDispatch :: intégrationtest code>). J'utilise le concept d'authentification et de machiniste pour les modèles de test. Je ne peux pas vous connecter avec succès.

Voici un exemple simple: p> xxx pré>

Voici la sortie de débogage: p> xxx pré>

Voici mon BlueprintS.Rb: P>

require 'machinist/active_record'
require 'sham'

User.blueprint do
  email {"foo@bar.com"}
  password {"qwerty"}
end


2 commentaires

J'ai récemment commencé à lire des ordonnances de test de rails ( PragProg.com/titles/nrtest/Rails-Test- prescriptions ). Assez tôt dans le livre, Noël mentionne qu'il utilisera du congé pour l'authentification. J'ai sauté à Github.com pour examiner son exemple d'application ( Github.com/noelrappin/hudle ) pour voir s'il résout ce problème. Pendant qu'il ne présente aucun test d'intégration, je le pose ici pour référence.


J'ai également changé (dos) à utiliser authlogic ( github.com/binaryLogic/authlogic ) pour l'authentification dans ma candidature. Je l'ai utilisé avant et comme ça beaucoup mieux que de concevoir.


5 Réponses :


2
votes

Je n'ai pas d'échantillon d'essai d'intégration dans le livre pour le congé, mais je pense que le code dans la définition étape dans le chapitre du concombre fonctionnera également si vous avez installé Webrat / Capybara:

@user = User.create!(:email => "email@email.com",  
            :password => "password",  
            :password_confirmation => "password")
visit "login"  
fill_in("user_email", :with => @user.email)  
fill_in("user_password", :with => "password") 
click_button("Sign In")


1 commentaires

Merci pour la réponse. Je vais devoir retirer ce projet de nouveau et voir comment cela fonctionne. +1 pour l'instant. Aussi, merci pour la bonne lecture :)



8
votes

Tout d'abord, avec Devise, vous devrez peut-être avoir à "confirmer" l'utilisateur.

Vous pouvez faire quelque chose comme ceci: xxx

Voici un exemple sans machiniste (mais il suffit de remplacer la partie de code de création d'utilisateur avec la pièce ci-dessus): < / p>

dans test_integration_helper: xxx

et dans votre intégration_test: xxx


1 commentaires

Merci pour la réponse. Je vais devoir retirer ce projet de nouveau et voir comment cela fonctionne. +1 pour l'instant.



1
votes

Si quelqu'un d'autre a un problème similaire ...

J'étais dans une situation similaire (migration d'Authlogic) et eu exactement le même problème. Le problème était dans l'initialisateur Devise.RB. Par défaut, il définit votre environnement de test pour utiliser seulement 1 étirement pendant le cryptage / décryptage des mots de passe. Honnêtement, je ne sais pas ce qu'est un étirement, mais pour le concevoir de travailler avec de vieux mots de passe cryptés authlogiques, les tronçons doivent être 20. Depuis que j'essayais de signer un utilisateur qui avait initialement le mot de passe crypté par Authlogic dans mon test, Devise doit également utiliser 20 étirements de test. J'ai changé la configuration comme ci-dessous: xxx


0 commentaires

10
votes

La raison pour laquelle il ne fonctionne pas est le congé crée des noms de champ de formulaire comme xxx pré>

et post_via_redirect attend ces noms comme arguments. Donc, la déclaration suivante ferait une connexion réussie. P>

post_via_redirect 'users/sign_in', 'user[email]' => 'foo@bar.com', 'user[password]' => 'qwerty' 


1 commentaires

Juste au cas où il aide - dans mon cas car il s'agissait d'un test d'intégration de JSON uniquement post_via_redirect 'Utilisateurs / Sign_in', utilisateur: {email: "foo@bar.com", mot de passe: "qwerty"}, format: : JSON a fonctionné.



3
votes

Etant donné que vous utilisez actionDispatch :: intégrationtest , vous pouvez inclure le Devise :: Test :: intégrationhelpers signe_in Au lieu de cela (que vous pouvez passer un utilisateur à): xxx


0 commentaires