簡體   English   中英

Ruby On Rails應該測試錯誤:新記錄中缺少密碼摘要

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM