gpt4 book ai didi

ruby-on-rails - rSpec Shoulda 匹配器测试验证

转载 作者:行者123 更新时间:2023-11-28 20:06:22 29 4
gpt4 key购买 nike

我对模型的属性进行了以下验证:

validates :on_ride_photo,
presence: true,
inclusion: { in: [true, false] }

然后我有以下测试:

context 'on_ride_photo' do
it { should validate_presence_of(:on_ride_photo) }
it { should allow_value(true).for(:on_ride_photo) }
it { should allow_value(false).for(:on_ride_photo) }
it { should_not allow_value(nil).for(:on_ride_photo) }
it { should_not allow_value(4).for(:on_ride_photo) }
it { should_not allow_value('yes').for(:on_ride_photo) }
end

但是在运行我的规范时出现以下错误:

2) Coaster validations should allow on_ride_photo to be set to false
Failure/Error: it { should allow_value(false).for(:on_ride_photo) }
Did not expect errors when on_ride_photo is set to false, got error:
# ./spec/models/coaster_spec.rb:86:in `block (3 levels) in <top (required)>'

我想允许 false 作为有效值的事实是否被它必须存在并且 false 归类为不存在的事实所打倒?如果是这样,我该如何解决这个问题?

最佳答案

是的,问题在于 presence: true,它检查属性是否不是 Object#blank?。由于验证是附加的,inclusion: 子句不能“覆盖”false 未通过 presence 测试的事实。

以下来自http://edgeguides.rubyonrails.org/active_record_validations.html#presence :

Since false.blank? is true, if you want to validate the presence of a boolean field you should use validates :field_name, inclusion: {
in: [true, false] }.

参见 Billy Chan's answer有关如何处理 bool 字段的讨论,特别包括有关哪些值被视为 niltruefalse 的信息。

关于ruby-on-rails - rSpec Shoulda 匹配器测试验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682643/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com