RozwiązanieAktualizacja do opracowania 3,1 => Pierwsze zresetować hasło tokenu jest nieprawidłowy
Dzięki tej gist postać Stevena Harman, mam to działa. 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
Dodałem plik devise_mail_helpers.rb
w tym samym folderze co cechy specyfikacji i napisał ten 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
Zajmuje się specyfikacją, aby działało w przeglądarce spójrz na odpowiedź Dave'a poniżej.
oryginalne pytanie
W moich szynach 4 app, mam zmodernizowane devise do 3,1 i pobiegł rails s
, to mam to:
`raise_no_secret_key': Devise.secret_key was not set.
Please add the following to your Devise initializer: (RuntimeError)
config.secret_key = '--secret--'
dodałem tajny klucz do inicjatora opracować .
Po tym pojawia się następujący błąd podczas próby zresetowania hasła
Reset password token is invalid
Wygląda tokena, który jest wysyłany na adres e-mail nie jest poprawny. Wszystko inne działa. Loguję się i wychodzę jak ciepły nóż przez masło.
Aktualizacja
Teraz myślę, że to musi być coś z szyfrowaniem z reset_password_token
tu ze spec cecha:
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")
pojawienia się błędu jest:
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"
Jakieś pomysły na temat tego, czego mi brakuje?
To jest poprawne rozwiązanie, aby działało w przeglądarce, ale jak to przetestować? –
W skrócie, Twój test Rspec powyżej wygląda na to, że powinien wystarczyć. Zakładając, że problem "nieważnego tokena" zniknął, a jeśli nie działa w określonym miejscu, powinieneś udostępnić błąd. Strategicznie rzecz biorąc, połączenie Rspec lub Cucumber z email_spec powinno umożliwić automatyczne przetestowanie tego. Moje połączone pytanie i [to wiki] (https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Cucumber) zawierają więcej informacji o tym, jak przetestować Devise z ogórkiem. –
test przechodzi. Zanim rozwiązałem problem, nie udało mu się "nieprawidłowy token". –