4
運行我的rspec期望的自定義驗證程序時出現此錯誤。rails rspec預計未能進行自定義驗證
expect {@ua.save!}.to raise_error(ActiveRecord::RecordInvalid,'Validation failed: This question is no longer active')
失敗
expected ActiveRecord::RecordInvalid with "Validation failed: This question is no longer active", got #<ActiveRecord::RecordInvalid: Validation failed: This question is no longer active.> with backtrace:
這隻似乎是問題,我自定義的驗證。 看到這個模型:
class UserAnswer < ActiveRecord::Base
belongs_to :user
belongs_to :question
validate :questionIsActive?
private
def questionIsActive?
errors.add(:base, "This question is no longer active.") if !self.question.is_active?
end
end
使用: 的Rails 3.2.11 Rspec的護欄2.12.2
以上述方式將測試綁定到驗證消息不是一個好主意。爲什麼?如果您將來更改驗證消息的文本,則會導致測試中斷。如果你想將它綁定到I18n的消息,那會更好。或者,如果您不想將其與消息綁定,你可以改爲寫:raise_error(ActiveRecord :: RecordInvalid) – jBeas
爲了約定的緣故,你最好命名自定義驗證方法'question_is_active'(或'active_question')。謂詞方法適用於那些返回布爾值的人,並且snake_case比Ruby中的camelCase更受歡迎。 – artificis