比较rspec自定义ActiveRecord :: RecordInvalid错误消息

时间:2017-07-16 12:10:54

标签: ruby-on-rails activerecord rspec

在模型中包含以下内容:

validates_uniqueness_of :title,
    if: proc { |item| item.item_type == 'tag' },
    case_sensitive: false,
    message: I18n.t('errors.key', value: "%{value}")

并尝试使用以下内容在rspec中进行验证:

expect { xxx }.to raise_error(
    ActiveRecord::RecordInvalid,
    I18n.t('errors.key', value: '...passing the title...')
)

我紧紧抓住以下内容:

ActiveRecord::RecordInvalid with "translated error",
got #<ActiveRecord::RecordInvalid: Validation failed: translated error>

期望等待没有报价的值,而发送的值有报价;它失败了

我在默认设置中遇到了同样的错误:

activerecord:
    errors:
      models:
        item:
          attributes:
            title:
              taken: 'translated error'

同样的测试通过以下内容:

expect { xxx }.to raise_error

expect { xxx }.to raise_error( ActiveRecord::RecordInvalid )

使用默认设置也是如此:

如果有任何帮助,谢谢你

1 个答案:

答案 0 :(得分:2)

ActiveRecord将前缀>>> message = "Hello Pls Work Bot" >>> print "pls work" in message.lower() True 添加到错误消息中。请在测试中尝试此操作:

Validation failed:

您可以通过在语言文件中设置以下键来更改此默认值:

expect { xxx }.to raise_error(
  ActiveRecord::RecordInvalid,
  "Validation failed: " + I18n.t('errors.key', value: '...passing the title...')
)