在递归Rails模型中,我验证了该模型无法引用自身:
validates :parent_entity, exclusion: { in: ->(entity) { [entity] } }
这成功,并且设置了带有正确消息的排除错误。我可以通过Rails控制台批准。
在Rspec测试中,我想检查是否添加了适当的排除错误:
it 'parent_entity cannot be same entity as child_entity' do
@child_entity1.parent_entity = @child_entity1
@child_entity1.valid?
expect(@child_entity1.errors.added?(:parent_entity, :exclusion)).to be_truthy
end
测试未能在期望中返回假值。
前面的方法对e来说是完美的。 G。空白错误,但不能排除。如果我在测试中将“:exclusion”与已解决的错误消息“已保留”交换,则可以使其正常运行,但这不是我想要的,应该做的。
答案 0 :(得分:2)
是从rails docs那里购买的吗?方法:
如果错误消息需要选项,则返回true,并显示 选项正确,如果选项不正确或缺失,则为false。
因此,选项必须完全匹配。 :exclusion
的必要选项是value
,并作为最后一个参数传递:
@child_entity1.errors.added?(:parent_entity, :exclusion, value: @child_entity1)