Van*_*Huy 8 rspec ruby-on-rails shoulda
在我的device模型中,我有
enum device_type: { ios: 1 , android: 2 }
validates :device_type, presence: true, inclusion: { in: device_types.keys }
Run Code Online (Sandbox Code Playgroud)
在我看来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
Run Code Online (Sandbox Code Playgroud)
当我运行rspec时,测试allow_values('ios', 'android')通过,但其余两个都失败了.
1)设备应确保在["ios","android"]中包含device_type
失败/错误:它{is_expected.to validate_inclusion_of(:device_type).in_array(%w(ios android))}
Run Code Online (Sandbox Code Playgroud)ArgumentError: '123456789' is not a valid device_type2)设备不应允许将device_type设置为"windows"
失败/错误:{is_expected.not_to allow_value('windows').for(:device_type)}
Run Code Online (Sandbox Code Playgroud)ArgumentError: 'windows' is not a valid device_type
"它不是有效的device_type"是正确的,但为什么这些测试失败了?
当您将属性定义为枚举时,您可以使用 Shoulda 匹配器进行测试
it { should define_enum_for(:device_type).with(:ios, :android) }
Run Code Online (Sandbox Code Playgroud)
如果您尝试分配任何其他值,ActiveRecord 将引发 ArgumentError(不是有效的 device_type)。
it { should define_enum_for(:device_type).with_values([:ios, :android]) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |