1

私は、レール3.1のsecure_passwordを使いこなしています。私はモデルrspecテストを書いていましたが、レール3.1のsecure_passwordによって提供される認証メソッドを呼び出す方法を理解できませんでした。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 

/ruby-1.9.3-p0/gems/activesupport-3.1.3/lib/active_support/whiny_nilを:私はここに私のユーザモデルに

をhas_secure_passwordを使用しています注意してください私のコンソールが私に与え最新のエラーです.rb:48:in method_missing': undefined method nil:NilClass(NoMethodError)

答えて

0

authenticateは、指定されたパスワードが正しいか、またはnilであるかをユーザに返します。あなたはすべてのものを設定している場合は、適切に(password_digest列を追加することを忘れないでください)これは、作業する必要があります。

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

更新:あなたはそれをチェックする必要がありますので、あなたは追加のエラーメッセージによると、@userはnilです。

+0

こんにちはJames、答えてくれてありがとう!残念ながらそれはそれほどではありません。 githubリポジトリによれば、authenticateは認証に失敗した場合はfalseを返します。したがって、falseまたはbe_nilは両方とも動作するはずです。 @userがpassword_digestに応答していることを確認するテストも成功しています。私は見て、あなたに知らせ続けます。 – sybohy

+0

「@userが応答する:password_digest」というテストでは、モデルのhas_secure_password行ではなく、dbスキーマの一部である属性がテストされていることに注意してください。 –