2

J'essaye d'obtenir un formulaire d'inscription en collaboration avec Devise; Je le test avec du concombre. Lorsqu'un utilisateur s'inscrit, j'envoie un e-mail de confirmation. Quelque chose ne va pas lors de l'exécution de mon test, cependant.'Jeton de confirmation invalide' lors des tests avec le concombre

Ceci est mon scénario:

Scenario: Signing in via confirmation 
    Given there are the following users: 
     | email    | password | unconfirmed | 
     | [email protected] | password | true  | 
    And "[email protected]" opens the email with subject "Confirmation instructions" 
    And they click the first link in the email 
    Then I should see "Your account was successfully confirmed." 
    And I should see "Signed in as [email protected]" 

Cependant, je reçois l'erreur suivante:

expected there to be content "Your account was successfully confirmed. You are now signed in." in "\n  Ticketee\n \n\nTicketee\nSign up\n Sign in\nResend confirmation instructions\n\n\n  \n  1 error prohibited this user from being saved:\n  Confirmation token is invalid\n\n\n Email\n\n \n\n Sign inSign upForgot your password?" (RSpec::Expectations::ExpectationNotMetError) 

Je suppose que la partie importante est ici:

1 error prohibited this user from being saved:\n Confirmation token is invalid

Je testé cela manuellement (est allé vous inscrire et cliqué sur le lien de confirmation dans l'e-mail) et cela fonctionne bien .. C'est seulement quand j'examine avec Cucumber que j'obtiens le message 'Confirmation token is invalid'. Quelqu'un sait comment je peux résoudre ce problème? J'aimerais voir mes tests passer ..

Merci beaucoup.

EDIT: Les étapes posées dans les commentaires:

When /^(?:I|they|"([^"]*?)") opens? the email with subject "([^"]*?)"$/ do |address, subject| 
    open_email(address, :with_subject => subject) 
end 

link En cliquant:

When /^(?:I|they) click the first link in the email$/ do 
    click_first_link_in_email 
end 

Je viens de regarder l'e-mail de confirmation que je suis arrivé et mon adresse e-mail est analysé comme mailto : lien; J'ai changé le premier lien étape à ceci:

And they follow "Confirm my account" in the email

mais cela ne fonctionne pas non plus .. Je reçois toujours le message d'erreur jeton non valide.

+0

Pouvez-vous afficher les définitions étape pour les étapes impliquant l'ouverture de l'e-mail et en cliquant sur le lien. –

+0

@AndyWaite J'ai mis à jour le post :) – cabaret

+0

Ah, vous utilisez la gem email_spec? Cela vaut probablement la peine de le mentionner aussi. Je crois que l'email généré apparaît dans le test.log, alors vérifiez-le et voyez si le lien est correct. –

Répondre

3

Alors .. J'ai perdu deux heures à ce sujet. J'ai eu une faute de frappe.

J'ai la ligne suivante:

unconfirmed = attributes.delete("unconfirmed") == "true"

J'ai oublié de mettre les guillemets autour true. Sans les citations, le test passe ..

Jeez.

Merci à tous ceux qui ont mis un peu de temps pour me aider :)

+0

Pouvez-vous expliquer ce que cette ligne est censée faire? Il est peut-être préférable de l'écrire, ce qui est moins sujette aux erreurs. BTW, cela devrait vraiment avoir été attrapé par un test unitaire - un bon exemple de pourquoi le concombre seul ne suffit pas. –

+0

Cette ligne est dans mon user_steps.rb; il définit la var 'unconfirmed' pour les utilisateurs, donc je sais quels utilisateurs ont confirmé leur acct et ceux qui ne l'ont pas fait. Je suis un livre cependant et la façon dont la ligne est écrite n'est pas si claire pour moi mais toi. Comment est-ce que j'écrirais un test unitaire pour ça? Je suis un peu nouveau dans toute cette affaire TDD; Je comprends comment écrire des tests Rspec pour les contrôleurs etc, mais pour un fichier de pas? – cabaret

+0

Ah, je pensais que vous vouliez dire que cette ligne était dans le code du modèle. –

Questions connexes