Solution
Grâce à cette gist forme Steven Harman, je l'ai eu à travailler. devise_mail_helpers.rb
module Features
module MailHelpers
def last_email
ActionMailer::Base.deliveries[0]
end
# Can be used like:
# extract_token_from_email(:reset_password)
def extract_token_from_email(token_name)
mail_body = last_email.body.to_s
mail_body[/#{token_name.to_s}_token=([^"]+)/, 1]
end
end
end
J'ai ajouté le fichier devise_mail_helpers.rb
dans le même dossier que les caractéristiques caractéristiques et écrit de cette spécification.
require 'devise_mail_helpers.rb'
include Features
include MailHelpers
describe "PasswordResets" do
it "emails user when requesting password reset" do
user = FactoryGirl.create(:user)
visit root_url
find("#login_link").click
click_link "Forgot your password?"
fill_in "Email", :with => user.email
click_button "Send instructions"
current_path.should eq('/users/sign_in')
page.should have_content("You will receive an email with instructions about how to reset your password in a few minutes.")
last_email.to.should include(user.email)
token = extract_token_from_email(:reset_password) # Here I call the MailHelper form above
visit edit_password_url(reset_password_token: token)
fill_in "user_password", :with => "foobar"
fill_in "user_password_confirmation", :with => "foobar1"
find('.signup_firm').find(".submit").click
page.should have_content("Password confirmation doesn't match Password")
end
end
Cela prend en charge les spécifications, pour le faire fonctionner dans le navigateur regarder Dave réponse ci-dessous.
Question D'Origine
Dans mon rails 4 app, je me suis mis à imaginer 3.1, et a couru rails s
, puis j'ai obtenu ceci:
`raise_no_secret_key': Devise.secret_key was not set.
Please add the following to your Devise initializer: (RuntimeError)
config.secret_key = '--secret--'
J'ai ajouté la clé secrète pour le dispositif d'initialiseur.
Après cela, j'obtiens l'erreur suivante quand j'ai essayer de réinitialiser le mot de passe
Reset password token is invalid
Il semble que le jeton qui est envoyé dans l'e-mail n'est pas correcte. Tout le reste fonctionne. Je vous connectant et comme un couteau chaud creux de beurre.
Mise à jour
Maintenant, je suppose que ça doit être quelque chose avec le cryptage de l' reset_password_token
Ici de la fonction spec:
user = FactoryGirl.create(:user,
:reset_password_token => "something",
:reset_password_sent_at => 1.hour.ago)
visit edit_password_url(user, :reset_password_token =>
user.reset_password_token)
fill_in "user_password", :with => "foobar"
click_button "Change my password"
page.should have_content("Password confirmation doesn't match Password")
l'erreur est:
Failure/Error: page.should have_content
("Password confirmation doesn't match Password")
expected to find text "Password confirmation doesn't match Password" in
"Reset password token is invalid"
Toutes les idées sur ce que je suis absent?