gpt4 book ai didi

ruby-on-rails - 如何为包含 Devise update_with_password 方法的方法编写通过测试?

转载 作者:行者123 更新时间:2023-11-28 20:15:55 24 4
gpt4 key购买 nike

我是 Devise 的新手,因为我已经使用了一个现有的应用程序。它使用 Devise 进行身份验证(无需确认)。我正在尝试为 users_controller 中的更新方法编写测试,它使用 update_with_password 方法。

我不知道我在这里做错了什么。要么是我没有将正确的参数传递给请求(尽管之后我通过开发和建模测试对其进行了检查(表单的 authenticity_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>

测试中的断言返回 false,尽管我从开发中的用户那里复制了 encrypted_pa​​ssword 和 password_salt。

开发中的请求参数:

{"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。

我怎样才能通过这个测试?非常感谢您的帮助...

最佳答案

第一遍看起来不错,除了一行。

raise @user.valid_password?(params[:user][:current_password]).inspect

尝试删除这条线,看看它是否通过。

关于ruby-on-rails - 如何为包含 Devise update_with_password 方法的方法编写通过测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com