获取FactoryBot :: DuplicateDefinitionError:Factory已注册

问题描述 投票:0回答:2

我得到FactoryBot :: DuplicateDefinitionError:Factory已注册:运行用户规范时出现用户错误。我想创建具有不同名称和年龄的多个用户对象。我在工厂的user.rb目录是

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

这段代码有什么问题吗?谢谢

ruby-on-rails rspec ruby-on-rails-5 factory-bot
2个回答
0
投票

我相信这是使用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

然后,当你需要Jimmy时,你可以像这样调用用户工厂:

FactoryBot.create :user, :jimmy

或者,如果你需要bob,请像这样调用:

FactoryBot.create :user, :bob

希望这可以帮助。


0
投票

您应该从正在运行的规范中调用您的工厂(具有不同的属性)。

工厂:

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
© www.soinside.com 2019 - 2024. All rights reserved.