【问题标题】:rails rspec expects fails for custom validationsrails rspec 预计自定义验证失败
【发布时间】:2013-02-05 18:01:52
【问题描述】:

我在使用自定义验证器运行我的 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

使用: 导轨 3.2.11 Rspec-rails 2.12.2

【问题讨论】:

  • 以上述方式将您的测试绑定到验证消息并不是一个好主意。为什么?如果您将来更改验证消息的文本,将导致测试中断。如果您要将它绑定到 I18n 消息会更好。或者,如果您根本不想将其绑定到消息;你可以改写: raise_error(ActiveRecord::RecordInvalid)
  • 为方便起见,您最好将自定义验证方法命名为question_is_active(或active_question)。谓词方法适用于返回布尔值的方法,在 Ruby 中,snake_case 比 camelCase 更流行。

标签: ruby-on-rails rspec rspec-rails


【解决方案1】:

你有一个错字。在字符串中添加句点:

expect {@ua.save!}.to  raise_error(ActiveRecord::RecordInvalid,'Validation failed: This question is no longer active.')

注意:您目前的期望是:

'验证失败:此问题不再有效'

但需要:

'验证失败:此问题不再有效。'

使其与您的验证字符串匹配:

'此问题不再有效。'

【讨论】:

  • 我知道我遗漏了一些明显的东西。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多