我已经使用bcrypt-ruby
和组合了一个带有用户身份验证的基本应用程序has_secure_password
。结果本质上是Rails 教程中应用程序的准系统版本。换句话说,我有一个 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
块实际上并未保存新密码。
供参考,相关控制器动作如下:
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