我试图让我的有效密码测试通过。当我运行它时,password_digest
哈希值似乎不同。我不知道该怎么做才能让他们匹配。
我主要使用 Michael Hartl 的“Ruby on Rails 教程:通过示例学习 Rails”一书,看来他通过了。
此外,我的应用程序代码按预期工作。我可以创建一个用户并在控制台中对他们进行身份验证,所以这只是在测试中。
我对测试还很陌生,所以我可能在这里遗漏了一些明显的东西。
谢谢你的帮助!
我正在使用 bcrypt,has_secure_password
这里是部分相关的用户规范代码:
describe User do
before { @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") }
subject { @user }
it { should respond_to(:name) }
it { should respond_to(:email) }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:authenticate) }
it { should be_valid }
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by(email: @user.email) }
describe "with a valid password" do
it { should eq found_user.authenticate(@user.password) }
end
describe "with an invalid password" do
let(:user_for_invalid_password) { found_user.authenticate('invalid') }
it { should_not eq user_for_invalid_password }
specify { expect(user_for_invalid_password).to be_false }
end
end
end
这是我的用户模型
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
validates :email, presence: true, uniqueness: { case_sensitive: false }, format: { with: VALID_EMAIL_REGEX }
has_secure_password
validates :password_confirmation, presence: true
validates :password, length: { minimum: 6 }
end