Rails ActiveRecord 验证:断言 errors.added?:inclusion 意外失败并出现漏报

Rails ActiveRecord validation: Assert of errors.added? :inclusion unexpectedly fails with a false negative

提问人:Jon Schneider 提问时间:11/14/2022 更新时间:11/14/2022 访问量:133

问:

在我的 Rails(版本 6.0.5.1)ActiveRecord 模型中,我有一个这样的验证:inclusion

validates :car_type, inclusion: ['coupe', 'sedan', 'convertible']

在相应的测试文件中,我尝试测试当将不在有效值列表中的值(如 )分配给此属性时是否引发验证错误。'airplane'car_type

以下 MiniTest 断言按预期通过:

assert car.errors.invalid?
assert car.errors.include? :car_type
assert car.errors.added? :car_type, 'is not included in the list'

但是,以下断言失败:Minitest::Assertion: Expected false to be truthy.

assert car.errors.added? :car_type, :inclusion

我希望根据这个答案及其链接的 ActiveRecord i18n 翻译文件,这种语法应该有效。

我怎样才能让最后一个断言按预期工作?

Ruby-on-Rails Ruby 验证 ActiveRecord 小测试

评论


答:

2赞 Jon Schneider 11/14/2022 #1

Rails 5.2.2 中的行为发生了变化,当调用 ... 在 ActiveRecord 对象上,必须添加指定无效值的第三个参数。.errors.added:inclusionvalue

正如预期的那样,此断言通过:

assert car.errors.added? :car_type, :inclusion, value: 'airplane'

参考资料: https://github.com/rails/rails/issues/34652