Получение FactoryBot :: DuplicateDefinitionError: Фабрика уже зарегистрирована - PullRequest
0 голосов
/ 06 сентября 2018

Я получаю FactoryBot :: DuplicateDefinitionError: Фабрика уже зарегистрирована: ошибка пользователя при запуске спецификации пользователя. Я хочу создать несколько объектов пользователя с разными именем и возрастом. мой user.rb на фабрике dir

FactoryBot.define do
   @users = [{display_name: 'abc', age: 25}, {display_name: 'xyz', age: 30}]

  @users.each do |user|
    factory :user do
      display_name user[:display_name]
      age user[:age]
    end
  end
end

что-то не так с этим кодом? Спасибо

Ответы [ 3 ]

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

Вы должны назвать свои фабрики (с другими атрибутами) из спецификаций, которые вы используете.

Фабрика:

FactoryBot.define do
  factory :user do
    display_name { "bob" }
    age { 30 }
  end
end

И в спецификации:

let(:bob) { create(:user) }
let(:jimmy) { create(:user, display_name: "jimmy", age: 25) }

Или, если вы действительно хотите перебрать свой исходный массив:

@users = [{display_name: 'abc', age: 25}, {display_name: 'xyz', age: 30}]
@users.each do |user|
  create(:user, display_name: user[:display_name], age: user[:age])

end
0 голосов
/ 09 июля 2019

Вам необходимо проверить каталог /test/factories, возможно, генератор rails создал фабрику для пользователя

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

Я считаю, что это хороший случай для использования черт FactoryBot.

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

Рассмотрим что-то вроде этого:

FactoryBot.define do
  factory :user do
    trait :bob do
      display_name { 'Bob' }
      age { 30 }
    end

    trait :jimmy do
      display_name { 'Jimmy' }
      age { 26 }
    end
  end
end

И затем, когда вам нужен Джимми, вы можете вызвать фабрику пользователей следующим образом:

FactoryBot.create :user, :jimmy

Или, если вам нужен Боб, назовите его так:

FactoryBot.create :user, :bob

Надеюсь, это поможет.

...