Как я могу вызвать ошибку, если моя фабрика не прошла проверку? - PullRequest
0 голосов
/ 30 августа 2018

Если я использую FactoryBot для создания записи, но она не проходит проверку, она возвращает только несохраненный экземпляр. Есть ли способ заставить FactoryBot выдавать ошибку, чтобы помочь мне отладить проблемы раньше?

FactoryBot.create(:house, some_options)
=> #<House id: nil, ...>

Тест будет продолжен и в конечном итоге потерпит неудачу где-то еще, потому что мой объект был недействительным.

Моей первой мыслью было бы создать черту и каким-то образом настроить ее по умолчанию для всех фабрик, но я не вижу простого способа сделать это.

trait :ensure_validity do
  before(:create) do |obj|
    raise StandardError unless obj.valid?
  end
end

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

factory_bot использует save! в качестве значения по умолчанию для создания экземпляров ( здесь - конфигурация на Github ), поэтому вы должны сразу получить ошибку, если есть какие-либо ошибки проверки. Вы случайно не используете обычай to_create на своем заводе? Можете ли вы предоставить полный завод?

0 голосов
/ 30 августа 2018

Попробуйте версию методов "взрыва".

house = FactoryBot.build(:house, options_hash)
house.save!

К сожалению, FactoryBot не поставляется с методом create!, но ActiveRecord делает.

В Rails вы можете заставить ActiveRecord выдавать ошибки, когда запись недействительна, используя метод :create! вместо только метода :create.

Вы могли бы сделать

House.create!(FactoryBot.attributes_for(:house, options_hash))
...