【问题标题】:How do I test that an enum action method validates the object before creation or saving?如何测试枚举操作方法在创建或保存之前验证对象?
【发布时间】:2014-04-04 12:53:18
【问题描述】:

我正在尝试测试 Lead.new(params).active! 是否会引发错误。解决这个问题的最佳方法是什么?

class Lead < ActiveRecord::Base
  enum status: { stale: 0, active: 1, converted: 2 }

  validate  :existing_lead, on: :create

  private

  def existing_lead
    if new_record? && (stale? || converted?)
      errors.add(:status, "invalid for new leads") 
    end
  end
end

我知道我可以手动设置枚举值,然后在我实例化的对象上测试valid?,但我希望有一种方法可以测试stale!converted!,它们在调用时会保存到数据库中。

【问题讨论】:

  • 我认为您的意思是要测试 Lead.new.stale!Lead.new.converted! 引发错误,因为这些错误对于新潜在客户无效。

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


【解决方案1】:

你可以这样做:

expect { Lead.new.stale! }.to raise_error(
  ActiveRecord::RecordInvalid, "Validation failed: Value invalid for new leads")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多