[英]Ruby On Rails shoulda test error: Password digest missing on new record
我正在嘗試編寫一個驗證電子郵件地址唯一性的測試。
這是為了在Rails 4.0.0中創建新的用戶帳戶並使用has_secure_password。
我收到此錯誤:
User should require case sensitive unique value for email
Failure/Error: it { should validate_uniqueness_of(:email) }
RuntimeError:
Password digest missing on new record
# ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'
user_spec.rb
:
require "spec_helper"
describe User do
it { should validate_presence_of(:email) }
it { should validate_presence_of(:full_name) }
it { should validate_presence_of(:password_digest) }
it { should validate_uniqueness_of(:email) }
end
這是用戶模型:
class User < ActiveRecord::Base
has_secure_password
validates :email, presence: true, uniqueness: true
validates :full_name, presence: true
validates :password_digest, presence: true
end
錯誤消息是什么意思,我在做什么錯?
問題解決了。 我在每次測試之前添加了一行代碼來創建User對象,現在錯誤消失了。
describe User do
# this before section solved the problem
before(:each) do
User.create(
full_name: "Bob",
email: "bob@bob.com",
password: "bob",
password_confirmation: "bob"
)
end
it { should validate_presence_of(:email) }
it { should validate_presence_of(:full_name) }
it { should validate_presence_of(:password_digest) }
it { should validate_uniqueness_of(:email) }
end
您的問題的答案在這里: https : //github.com/thoughtbot/shoulda-matchers/issues/371
似乎當前的解決方案是在測試唯一性之前創建新記錄。 簡而言之,這是潛在的問題:
看起來,Rails 4版本的
has_secure_password
添加了一個before_create來確保password_digest
被填充。 但是,Rails 3版本沒有此檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.