Soluzioneaggiornamento a ideare 3.1 => ottenere token reimpostazione password non è valida
Grazie a questo modulo gist Steven Harman, ho capito di lavoro. 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
ho aggiunto il file devise_mail_helpers.rb
nella stessa cartella e le caratteristiche specifiche e scritto questo spec.
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
Questo si occupa delle specifiche, per farlo funzionare nel browser guarda la risposta di Dave qui sotto.
domanda iniziale
Nei miei rotaie 4 app, ho aggiornato disposizione testamentaria al 3,1 e corse rails s
, quindi ho ottenuto questo:
`raise_no_secret_key': Devise.secret_key was not set.
Please add the following to your Devise initializer: (RuntimeError)
config.secret_key = '--secret--'
ho aggiunto la chiave segreta per l'inizializzazione escogitare .
Dopo questo ho il seguente errore quando si tenta di reimpostare la password
Reset password token is invalid
Sembra che il token che viene inviato nella e-mail non è corretto. Tutto il resto funziona. Accedo ed esco come un coltello caldo attraverso il burro.
Aggiornamento
Ora immagino che è avuto modo di essere qualcosa con la crittografia del reset_password_token
Qui dalla funzione specifica:
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")
è verificato l'errore è:
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"
Qualche idea su cosa mi manca?
Questa è la soluzione corretta per far funzionare il browser, ma come testarlo? –
A colpo d'occhio, il tuo test Rspec sopra sembra che dovrebbe fare il trucco. Supponendo che il problema del "token non valido" sia scomparso, e se si verifica un errore in un punto specifico, è necessario condividere l'errore. Strategicamente parlando, la combinazione di Rspec o Cucumber con email_spec dovrebbe consentire di testare automaticamente questo aspetto. La mia domanda collegata e [questo wiki] (https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Cucumber) hanno ulteriori informazioni su come testare Devise con Cucumber. –
il test sta passando. Prima di risolvere il problema, non funzionava con "token non valido". –