我正在尝试实施一些测试来验证Authlogic密码重置的行为,如http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic/中所述
我正在使用Authlogic,Shoulda,Webrat和Factory Girl,这是我的测试:
require 'test_helper'
class PasswordResetTest < ActionController::IntegrationTest
setup :activate_authlogic
context "A registered user" do
setup do
@reggie = Factory(:reggie)
end
should "not allow logged in users to change password" do
visit signin_path
fill_in 'Email', :with => @reggie.email
fill_in 'Password', :with => @reggie.password
click_button 'Sign In'
assert_equal controller.session['user_credentials'], @reggie.persistence_token
visit change_password_path
assert_equal account_path, path
assert_match /must be logged out/, flash[:notice]
visit signout_path
assert_equal controller.session['user_credentials'], nil
visit change_password_path
assert_equal change_password_path, path
end
should "allow logged out users to change password" do
visit signout_path
assert_equal controller.session['user_credentials'], nil
visit change_password_path
assert_template :new
fill_in 'email', :with => @reggie.email
click_button 'Reset my password'
assert_match /Please check your email/, flash[:notice]
assert !ActionMailer::Base.deliveries.empty?
sent = ActionMailer::Base.deliveries.first
assert_equal [@reggie.email], sent.to
assert_match /Password Reset Instructions/, sent.subject
assert_not_nil @reggie.perishable_token
#TODO
p "Perishable Token #{@reggie.perishable_token}"
assert_match assigns[:edit_password_reset_url], sent.body
end
end
end
在测试的最后两行中,我试图确保发出的链接具有正确的perishable_token,并且在打印的Perishable Token和发送的链接中的令牌之间总是出现不同。
我该如何测试这种行为?
谢谢,Siva
答案 0 :(得分:0)
小心。 Authlogic很神奇。某些操作会导致User对象发生变异,而当它发生变异时,perishable_token就会消失(重新生成)。
我想知道您的访问signout_path
是否真的让您退出。通常,如果您的UserSession是RESTful,则必须向资源发出HTTP DELETE以实际删除会话。只是访问路径(使用GET)将不会删除会话,除非您有明确的路由(例如'/logout'
到:controller => 'user_sessions', :action => 'destroy'
)
答案 1 :(得分:0)
将notifier.rb
中的行更改为:
body :edit_password_resets_url => edit_password_resets_url(user.perishable_token)