Я изучаю урок Майкла Хартла. Я использую RSPEC для запуска теста.
Пока все хорошо, но кажется, что я ударил стену следующим примером.
Вот тест, который не проходит (он должен пройти):
describe "authenticate method" do
it "should return the user on email/password match" do
matching_user = User.authenticate(@attr[:email], @attr[:password])
matching_user.should == @user
end
end
На всякий случай.
@ пользователь определен как:
before(:each) do
@user = User.create!(@attr)
end
@ attr определяется как:
before(:each) do
@attr = {
:name => "Example user",
:email => "user@example.com",
:password => "foobar",
:password_confirmation => "foobar"
}
end
Записи в user.rb
before_save :encrypt_password
def has_password?(submitted_password)
encrypted_password == encrypt(submitted_password)
end
def self.authenticate(email, submitted_password)
user = find_by_email(email)
return nil if user.nil?
return user if user.has_password?(submitted_password)
end
private
def encrypt_password
self.salt = make_salt unless has_password?(password)
self.encrypted_password = encrypt(password)
end
def encrypt(string)
secure_hash("#{salt}--#{string}")
end
def make_salt
secure_hash("#{Time.now.utc}--#{password}")
end
def secure_hash(string)
Digest::SHA2.hexdigest(string)
end
Сообщение об ошибке отображается при сбое теста
c:\RailsInstaller\work\apptwit>rspec spec/models/user_spec.rb
.................F
Failures:
1) User password validations password encryption authenticate method should return the user on email/password
Failure/Error: matching_user.should == @user
expected: #<User id: 1, name: "Example user", email: "user@example.com", created_at: "2011-12-07 19:08:23
ed_at: "2011-12-07 19:08:23", encrypted_password: "fbdbaf712fa1b6c925c4ab2192e73ac9f9d1bedf67630610d68...">
got: nil (using ==)
# ./spec/models/user_spec.rb:204:in `block (5 levels) in <top (required)>'
Finished in 221.37 seconds
18 examples, 1 failure
Failed examples:
rspec ./spec/models/user_spec.rb:202 # User password validations password encryption authenticate method should
he user on email/password match
Буду признателен за любые указатели,
Большое спасибо.