2

我是 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_pa​​ssword 和 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,尽管我在请求中发送它。

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

4

1 回答 1

0

在第一次通过时,它看起来不错,除了一条线。

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

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

于 2013-07-24T14:42:26.907 回答