1

Я играю с защищенным паролем в рельсах 3.1. Я писал тестирование модели rspec, но не мог понять, как вызвать метод аутентификации, предоставляемый secure_password в rails 3.1.Rails 3.1 secure_password и Rspec

describe "authentication" do 
    before(:each) do 
    @user = User.create!(@attr) 
    end 
.... 

    describe "it should check credentials" do 
    describe "it should return false on an invalid password" do 
     @user.authenticate("wrongpass").should_be false 
    end 
    end 
end 

Есть идеи? Обратите внимание, я использую has_secure_password в моей модели пользователя

вот Lastest ошибка моя консоль дает мне:

/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/whiny_nil .rb: 48: in method_missing': undefined method authenticate 'for nil: NilClass (NoMethodError)

ответ

0

аутентификация возвращает пользователя, если пароль указан правильно или равен нулю. Если у вас есть все установки надлежащим образом (не забудьте добавить столбец password_digest), это должно работать:

@user.authenticate("wrongpass").should be_nil 

Update: согласно добавленных вами сообщение об ошибке, @user равна нулю, так что вы должны проверить, что.

+0

Эй, Джеймс, спасибо за ответ! К сожалению, это не совсем так. Согласно реестру github, аутентификация должна возвращать значение false, если оно не аутентифицируется, поэтому false или be_nil должны работать. У меня также есть успешный тест, чтобы проверить, что @user отвечает на: password_digest. Я продолжу смотреть и дам вам знать. – sybohy

+0

Обратите внимание, что тест «@user отвечает на: password_digest» для атрибута, являющегося частью схемы db, а не для строки has_secure_password в модели. –