Rails: тестирование собственного валидатора для нескольких моделей - PullRequest
0 голосов
/ 22 мая 2018

У меня есть собственный валидатор для проверки моего налогового номера различных типов организаций.Мне было интересно, можно ли протестировать его с 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

Заранее спасибо.

...