在我的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翻译文件。
如何使最后一个断言按预期工作?
在Rails 5.2.2中有一个行为变化,当调用.errors.added
…在ActiveRecord对象的:inclusion
上,必须添加第三个value
参数来指定无效值。
这个断言如预期的那样通过了:
assert car.errors.added? :car_type, :inclusion, value: 'airplane'
参考:https://github.com/rails/rails/issues/34652