обрабатывать повторяющиеся модели создает - PullRequest
0 голосов
/ 03 мая 2018

Я использую Rspec в Rails. В настоящее время я тестирую одну из моих моделей. Эта конкретная модель внесена в базу данных с 5 записями. Каждая запись имеет атрибут name с засеянным значением. Например:

  def self.seed
    find_or_create_by(name: 'Text')
    find_or_create_by(name: 'Number')
    find_or_create_by(name: 'Date')
    find_or_create_by(name: 'Time')
    find_or_create_by(name: 'Boolean')
  end

Я хочу проверить создание каждого в Rspec. И в настоящее время я делаю это:

describe FieldType, type: :model do
  context "when :name is text"  do
    let(:field_type) { FieldType.create(name: "Text") }

    it { expect(field_type).to be_persisted }
    it { expect(field_type.name).to eq("Text")}
    it { expect(field_type.type_from_field).to be(String) }
  end

  context "when :name is number"  do
    let(:field_type) { FieldType.create(name: "Number") }

    it { expect(field_type).to be_persisted }
    it { expect(field_type.name).to eq("Number")}
    it { expect(field_type.type_from_field).to be(Integer) }
  end

  ...

Это правильный способ проверить это поведение? Или есть более эффективный способ сделать это?

1 Ответ

0 голосов
/ 04 мая 2018

Похоже, что тестируемая система - это метод .seed; так что, может быть, что-то вроде этого:

describe FieldType do
  describe '.seed' do
    before do
      described_class.seed
    end

    it 'creates the expected records' do
      expect(described_class.pluck(:name)).to match_array(['Text', 'Number', 'Date', 'Time', 'Boolean'])
    end
  end
end

Также, пожалуйста, проверьте Better Specs для некоторых рекомендаций и rubocop-rspec для автоматической проверки вашего кода на соответствие некоторым рекомендациям RSpec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...