在我的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')通过了,但是其余两个都失败了。



“这不是有效的device_type”是正确的,但是为什么这些测试失败了?

最佳答案

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

it { should define_enum_for(:device_type).with(:ios, :android) }
如果您尝试给tu分配任何其他值,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/

10-10 21:39