Подтвердить что ты не робот

Factory проверка уникальности девушки не подходит для связанных фабрик

У меня есть (упрощенные) заводы, определенные следующим образом:

factory :league do
  acronym 'NBA'
end

factory :division do
  league
end

Дивизии принадлежат Лигам. Когда я определяю этот factory, я полагал, что 1 лига будет создана, и эта лига будет повторно использоваться снова и снова, чтобы дать дивизиям реальную лигу.

Вместо этого я получаю ошибки во втором вызове FactoryGirl.create(:division), потому что Лига acronym должна быть уникальной.

class League < ActiveRecord::Base
  validates :acronym, uniqueness: true
end

что приводит к следующему разрыву в тесте

ActiveRecord:: RecordInvalid: не удалось выполнить проверку: уже принят Акт

Как я могу обойти это, желательно, не создавая иерархию в настройке теста?

Если для чего-то лучше, чем factory_girl, для чего я пытаюсь выполнить, предложите

4b9b3361

Ответ 2

В зависимости от того, где вы вызываете FactoryGirl.create, записи будут созданы для каждой конкретной спецификации. То, что вы хотите, database_cleaner, после его установки, очистит вашу базу данных после каждой спецификации, убедившись, что ваши ошибки проверки больше не являются проблемой,

ИЗМЕНИТЬ

Упс, я неправильно понял ваш вопрос. То, что вы хотите сделать, - либо использовать камень faker для генерации случайных строк для каждого аббревиатуры или использовать последовательность factory_girl, подобную этой

FactoryGirl.define do
  sequence :acronym do |n|
    "NBA#{n}"
  end

  factory :league do
    acronym
  end
end

Использование последовательности действительно гарантирует, что каждая созданная лига имеет уникальный аббревиатур.