У меня есть собственный валидатор для проверки моего налогового номера различных типов организаций.Мне было интересно, можно ли протестировать его с Rspec, передавая разные модели на тесты, чтобы сохранить вещи СУХОЙ.
app / models / restaurant.rb
class Restaurant < ApplicationRecord
validates :tax_number, uniqueness: true, presence: true
validates_with TaxNumberValidator
end
app / models /supplier.rb
class Supplier < ApplicationRecord
validates :tax_number, uniqueness: true, presence: true
validates_with TaxNumberValidator
end
Так выглядит мой spec-файл сейчас, но в идеале, вместо того, чтобы тестировать отдельно для каждой модели, я хотел бы передать любой экземпляр с атрибутом :tax_number
, чтобы проверить, действителен ли он.
describe TaxNumberValidator do
with_model :restaurant do
table do |t|
t.string :tax_number
end
model do
validates :tax_number, tax_number: true
end
end
it 'should be valid with a valid tax number' do
expect(Fabricate(:restaurant)).to be_valid
end
it 'should be invalid without an tax number' do
expect(Fabricate.build :restaurant, tax_number: '').not_to be_valid
end
it 'should be invalid with an invalid tax number' do
expect(Fabricate.build :restaurant, tax_number: '111').not_to be_valid
expect(Fabricate.build :restaurant, tax_number: 'abc').not_to be_valid
end
end
Заранее спасибо.