我是 Devise 的新手,因为我已经使用了现有的应用程序。它使用 Devise 进行身份验证(无需确认)。我正在尝试为 users_controller 中的更新方法编写一个测试,它使用 update_with_password 方法。
我无法弄清楚我在这里做错了什么。要么我没有将正确的参数传递给请求(尽管我在之后通过开发和建模测试检查了它(除了表单的真实性_token)),或者出现了其他问题。
我正在使用 Test::Unit 和固定装置:
在 users_controller 中:
def update
@user = current_account.users.find(params[:id])
raise @user.valid_password?(params[:user][:current_password]).inspect
if @user.update_with_password(params[:user])
sign_in(@user, :bypass => true)
flash[:notice] = flash_saved
redirect_to edit_user_path(@user)
else
flash[:alert] = flash_not_saved
render 'edit'
end
end
在 users_controller_test 中:
test "should update user with password" do
@user = users(:participant)
sign_in(@user)
assert_equal(true, @user.valid_password?('<password>'))
put :update, {id: @user.id, method: :put, :user => {email: @user.email, password: nil, password_confirmation: nil, current_password: "<password>", firstname: "louis"}, subaccount: "test"}
end
在赛程中:
participant:
email: participant@test.com
id: 3
confirmed_at: 2013-01-01 00:10:00
account_id: 1
firstname: participant
last_sign_in_at: <%= Time.now - 30 %>
encrypted_password: <encrypted_password>
password_salt: <password_salt>
尽管我从开发中的用户那里复制了 encrypted_password 和 password_salt,但测试中的断言返回 false。
开发中的请求参数:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"hy3IJ8C7qQs+iyxZ/VCnrVWEh9vecZCGrAuxwEWxWEE=",
"user"=>{"email"=>"my@email.com",
"firstname"=>"",
"lastname"=>"",
"gender"=>"",
"phone1"=>"",
"current_password"=>"[FILTERED]",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"},
"commit"=>"Opslaan",
"subaccount"=>"experience",
"id"=>"3087"}
测试中的请求参数:
{"subdomain"=>nil, "method"=>"put", "user"=>{"email"=>"participant@test.com", "firstname"=>"louis"}, "id"=>"3", "subaccount"=>"test", "controller"=>"users", "action"=>"update"}
不知何故,它没有显示:current_password,尽管我在请求中发送它。
我怎样才能让这个测试通过?非常感谢您的帮助...