我目前正在关注 Michael Hartl 关于 RoR 的教程,并试图更多地掌握 Rspec 测试。我能够了解正在发生的大部分事情,但是我对 :authenticate 方法的功能和功能有点困惑:
it { should respond_to(:authenticate) }
以及它与以下代码部分的关系:
describe "return value of authenticate" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }
describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not == user_for_invalid_password }
specify { user_for_invalid_password.should be_false }
end
end
我理解使用 let 和相应的块分配变量,但我很难理解调用 authenticate 方法时发生了什么,它在初始行中对什么进行身份验证?它是针对需要存在电子邮件并且匹配特定正则表达式的 user.rb 模型进行身份验证,还是其他东西。为了清楚起见,我包含了 user.rb 代码:
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
before_save { |user| user.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true
end
非常感谢任何帮助。