ruby-on-rails - 如何测试密码修改成功?

标签 ruby-on-rails ruby-on-rails-3 rspec rspec-rails railstutorial.org

我使用 bcrypt-rubyhas_secure_password 将一个基本应用程序与用户身份验证结合在一起。结果本质上是来自 Rails Tutorial 的应用程序的准系统版本。 .换句话说,我有一个 RESTful 用户模型以及登录和注销功能。

作为编辑用户信息测试的一部分,我编写了一个更改密码的测试。虽然更改密码在浏览器中工作得很好,但我下面的测试没有通过。

subject { page }

describe "successful password change"
  let(:new_password) { "foobaz" }
  before do
    fill_in "Password",               with: new_password
    fill_in "Password Confirmation",  with: new_password
    click_button "Save changes"
  end

  specify { user.reload.password.should == new_password }
end

显然,我误解了这里的一些基本细节。

简而言之:

1) 为什么上面的代码不起作用?更改密码功能在浏览器中有效。同时,rspec 继续重新加载上面最后一行中的旧密码。然后测试失败。

2) 测试密码更改的更好方法是什么?

编辑:

初始密码设置为foobar,错误信息为:

Failure/Error: specify { user.reload.password.should == new_password }
   expected: "foobaz"
        got: "foobar" (using ==)

基本上,看起来 before block 实际上并没有保存新密码。

供引用,相关 Controller Action 如下:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:success] = "Profile Updated"
    sign_in @user
    redirect_to root_path
  else
    render 'edit'
  end
end

最佳答案

对于 Devise 用户,请使用 #valid_password?相反:

expect(user.valid_password?('correct_password')).to be(true)

来源:Ryan Bigg

关于ruby-on-rails - 如何测试密码修改成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919835/

相关文章:

ruby-on-rails - 如何合并同一模型上两个查询的结果?

ruby-on-rails - 如何从谷歌地图中的详细地址获取特定城市

ruby-on-rails - 如何将一个数组的数组合并成一个数组?

ruby-on-rails - 使用子文件夹中的 Controller 设计 UninitializedConstant ApplicationController

ruby - 使用 Mocha 去除类方法

ruby-on-rails - 期待 <"edit"> 但使用 <[]> 渲染

ruby-on-rails - 使用重复条目测试 Rails 模型的唯一性

ruby-on-rails - 使用 Rails 和 PostgreSQL 的双主键索引

ruby-on-rails - 在 ROR 应用程序中使用 Facebook 和 OAuth 登录时出错

javascript - 如何动态添加国家标记?