有効なパスワードのテストに合格しようとしています。実行するとpassword_digest
ハッシュが違うようです。それらを一致させるために何をすべきかわかりません。
私は主に、Michael Hartl による「Ruby on Rails Tutorial: Learn Rails by Example」という本を使用していましたが、彼はこれに合格したようです。
さらに、私のアプリケーション コードは期待どおりに動作します。ユーザーを作成してコンソールで認証できるので、これはテストの中断にすぎません。
私はテストにかなり慣れていないので、ここで明らかな何かが欠けている可能性があります。
ご協力いただきありがとうございます!
私は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