我有一个简单的ActiveModel类,它包含一个字符串字段,我在其上定义了一个包含验证器:
$ rails generate model Person name:string gender:string
class Person < ActiveRecord::Base
validates :name, presence: true
validates :gender, inclusion: { in: %w(male female unknown) }
end
现在我正在编写一些RSpec测试用例,它应该代表该模型的最新文档。
describe Person, type: :model do
context 'attributes' do
context 'gender' do
it 'allows "male"' { ... }
it 'allows "female"' { ... }
it 'allows "unknown"' { ... }
end
end
end
如何从提供给验证器的列表中自动生成这三个测试用例?
我知道我可以使用Person.validators_on(:gender).first
获取验证器,但不知道如何查询in
选项的可枚举验证器实例。
最终目标是用
之类的东西替换这三个测试用例query_validator_for_in_enum().each do |valid_gender|
it "allows '#{valid_gender}'" { ... }
end
理由:我不想为“性别”创建一个单独的表格。解决这个问题。
答案 0 :(得分:2)
我想你可能想查看shoulda-matchers gem。
添加此类检查非常简单:
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_inclusion_of(:gender).in_array(%w(male female unknown)) }
我会在模型中创建一个常量:
GENDERS = %w(male female unknown)
并在规格中使用它:
it { is_expected.to validate_inclusion_of(:gender).in_array(Person::GENDERS) }