获取FactoryBot :: DuplicateDefinitionError:工厂已经注册

4

当我运行用户规范时,出现了FactoryBot :: DuplicateDefinitionError:Factory already registered:user错误。我想创建多个具有不同名称和年龄的用户对象。我的factories目录中的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

这段代码有什么问题吗? 谢谢。
4个回答

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

0
你需要验证 /test/factories 目录,可能是 Rails 代码生成器创建了一个关于用户的工厂。

-1

我遇到了一个错误,通过将./spec/factories目录中的所有文件收集到一个文件./spec/support/factory_models.rb中,并在rails_helper.rb中添加require 'support/factory_models'来修复它。

但是,每当我生成一个新的模型时,我都必须手动剪切/粘贴新模型的工厂代码到factory_models.rb中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接