gpt4 book ai didi

ruby-on-rails - 使用 shoulda-matchers 检查枚举值时出错

转载 作者:行者123 更新时间:2023-12-04 04:38:00 27 4
gpt4 key购买 nike

在我的 device 模型中,我有

enum device_type: { ios: 1 , android: 2 }
validates :device_type, presence: true, inclusion: { in: device_types.keys }

在我的 device_spec.rb 中,我为此编写了一些测试,例如
describe 'validations' do
subject { FactoryGirl.build(:device) }

it { is_expected.to allow_values('ios', 'android').for(:device_type) }
it { is_expected.to validate_inclusion_of(:device_type).in_array(%w(ios android)) }
it { is_expected.not_to allow_value('windows').for(:device_type) }
end

我跑rspec的时候,测试 allow_values('ios', 'android')通过了,但是剩下的两个都失败了。

1) Device should ensure inclusion of device_type in ["ios", "android"]

Failure/Error: it { is_expected.to validate_inclusion_of(:device_type).in_array(%w(ios android)) }

 ArgumentError:
'123456789' is not a valid device_type

2) Device should not allow device_type to be set to "windows"

Failure/Error: it { is_expected.not_to allow_value('windows').for(:device_type) }

 ArgumentError:
'windows' is not a valid device_type


“它不是有效的设备类型”是正确的,但为什么这些测试失败了?

最佳答案

当您将属性定义为 enum 时,您可以使用 Shoulda 匹配器进行测试

it { should define_enum_for(:device_type).with(:ios, :android) }
如果您尝试分配任何其他值,ActiveRecord 将引发 ArgumentError(不是有效的 device_type)。
More recent shoulda syntax :
it { should define_enum_for(:device_type).with_values([:ios, :android]) }

关于ruby-on-rails - 使用 shoulda-matchers 检查枚举值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496020/

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