Je veux écrire un test d'intégration des rails (avec Voici un exemple simple: p> Voici la sortie de débogage: p> Voici mon BlueprintS.Rb: P> 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.
require 'machinist/active_record'
require 'sham'
User.blueprint do
email {"foo@bar.com"}
password {"qwerty"}
end
5 Réponses :
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")
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 :)
Tout d'abord, avec Devise, vous devrez peut-être avoir à "confirmer" l'utilisateur.
Vous pouvez faire quelque chose comme ceci: p> 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: p> et dans votre intégration_test: p>
Merci pour la réponse. Je vais devoir retirer ce projet de nouveau et voir comment cela fonctionne. +1 pour l'instant.
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: p>
La raison pour laquelle il ne fonctionne pas est le congé crée des noms de champ de formulaire comme 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'
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 code> a fonctionné.
Etant donné que vous utilisez actionDispatch :: intégrationtest code>, vous pouvez inclure le
Devise :: Test :: intégrationhelpers Utilisez le module et utilisez la méthode
signe_in code> Au lieu de cela (que vous pouvez passer un utilisateur à):
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.