Rails 3 Tutoriel Chapitre 11 “la Validation a échoué: e-Mail a déjà été prises” erreur
Mon problème se pose dans le Chapitre 11 de l'Ruby on Rails Tutoriel ici.
J'ai vu cette rspec erreur:
Failure/Error: :user => Factory(:user, :email => Factory.next(:email)))
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
première dans user_spec.rb
puis dans micropost_spec.rb
. C'était assez déroutant. J'ai pensé à l'usine des déclarations ont été de la génération d'un utilisateur lors d'un nouveau test db à chaque fois l'autotest a couru rspec. J'ai vérifié les fichiers source de la branche master avec git et essayé encore, mais vu la même erreur. Je soupçonne donc il est lié à la db contenu d'une certaine façon et pas le code.
Alors j'ai fait la suivante:
restarted "rails s"
restarted autotest
rake db:reset
rake db:migrate
rake db:test:prepare
rake db:populate
... et tout est passé au vert. Rspec tests passés.
Il y a peut être un plus “à la pointe” de la solution, mais j'ai été ravie que cela a fonctionné. Espérons que cela aide quelqu'un d'autre. Je suis de gauche à conclure que mon test/développement d'une certaine manière quelque chose d'ajouté à la db qui était inattendu. Je suppose que les étapes ci-dessus sont un bon moyen de vous faire une nouvelle db près de la fin du chapitre 11.
Y avait-il une méthode plus directe pour résoudre ce problème? Le message d'erreur indiquent un autre problème que j'ai abordé sans s'en rendre compte? Je me suis laissé penser que l'exécution de rspec ne garantit pas de frais de test db à chaque fois. C'est qu'une hypothèse erronée?
nzifnab vous sont corrects. Mon post est surtout une déclaration qui, néanmoins, je l'espère, sera utile à certains. Je n'ai proximité avec un véritable requête, "Si quelqu'un pourrait jeter un peu de lumière ici, je pense que cela pourrait être sympa aussi." Ma "solution" a été quelque chose d'un fusil de chasse. Je ne suis toujours pas sûr de ce qui était mal, mais la recette ci-dessus peut être une pratique correctif pour ceux qui sont à l'aise de vivre dans l'obscurité.
Je vois votre point de vue. Je pourrais avoir posté ce que "j'ai déroutante rspec erreurs dans le Chapitre 11...." Et puis aussi posté ma propre réponse avec commentaire. Désolé. La prochaine fois. Si elle n'avait pas été de 4:00 du matin, heure locale, j'ai pensé de ce premier tour. P.
OriginalL'auteur Perry Horwich | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
J'ai eu du mal avec les tests d'Intégration, peu de temps après le Chapitre 9.4. Tous mes contrôleur de tests et de la demande de test d'intégration s'est affirmée avec le message "e-Mail a déjà été prises"
Ce que j'ai appris de RailsTutorial - chapitre 8.4.3 - base de données de Test pas de compensation après l'ajout de l'utilisateur dans le test d'intégration est que vous avez besoin de faire quelque chose pour nettoyer après les tests d'intégration, parce que contrairement à unité de tests, ils peuvent ne pas nettoyer après eux-mêmes.
La solution présentée il y avait à utiliser la DatabaseCleaner gem, dont la mise en œuvre est également expliqué dans la Question.
Je pense que si vous ne mettez pas en œuvre une stratégie pour le nettoyage après le test d'intégration, vous continuerez à utiliser votre "fusil à pompe" solution pour le nettoyage de la base de données chaque fois que vous exécutez le test de la suite. Certainement pas amusant.
OriginalL'auteur Carl Thuringer
Cela fonctionne pour moi:
bundle exec rake db:test:prepare
C'est aussi dans le tutoriel.
OriginalL'auteur Peter Lee
Pour moi, la question semble être en cours d'exécution Spork. Après le redémarrage, je peux exécuter les tests autant de fois que j'ai besoin.
OriginalL'auteur Daniel Compton
Il a contribué à, ajoutés au fichier
factories
OriginalL'auteur AleksNV
Dans mon cas, le problème a été en est égale à e-mails dans
et
OriginalL'auteur doorsfan