【问题标题】:Shoulda-Matchers and Custom Error Messages应该匹配器和自定义错误消息
【发布时间】:2017-02-24 11:09:35
【问题描述】:

我正在尝试使用 shoulda 匹配器进行一些基本的 rspec 测试,但我遇到了一个我之前从未在 SO 上看到过的错误。

我有一个名为 name 的唯一属性,但由于项目所需的原因,我在 config/locales/en.yml 中用我自己的消息形式覆盖了默认的“已被采用”消息,而应该没有好像很喜欢。

我收到了这个错误信息

 Failure/Error: it { should validate_uniqueness_of(:name) }

   Flavor did not properly validate that :name is case-sensitively unique.
     Given an existing Flavor whose :name is ‹"Factory Flavor Namea"›,
     after making a new Flavor and setting its :name to ‹"Factory Flavor
     Namea"› as well, the matcher expected the new Flavor to be invalid and
     to produce the validation error "has already been taken" on :name. The
     record was indeed invalid, but it produced these validation errors
     instead:

     * name: ["This flavor name is already in the system"]
     * abbreviation: ["This abbreviation is already in use"]

我在 shoulda-matchers 中是否缺少允许测试通过而不必担心错误消息的设置,或者这是模块的限制?

【问题讨论】:

  • 您是否在 Flavor 模型中为 name 而不是 'validate_uniqueness_of(:name)' 设置原始验证和错误消息?
  • @YTorii 对不起 - 我不明白这个问题
  • 哦,对不起。错误消息说,唯一性验证成功,但错误消息与预期不同(Rails 的唯一性默认错误消息)。所以我猜原来的错误信息是在模型中手动设置的。

标签: ruby-on-rails rspec activemodel shoulda


【解决方案1】:

如果您不在匹配器上使用with_message 方法,则使用uses default message

要使您的测试工作,您应该覆盖matcher's default message

it { expect(subject).to validate_uniqueness_of(:name).with_message("has already been taken") }

【讨论】:

  • 谢谢。当我查看 shoulda github 存储库时,我自己并没有看到这一点。我还在熟悉它。
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2018-11-13
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多