获取工厂机器人::D uplicateDefinitionError:工厂已注册



我正在得到工厂机器人::D uplicateDefinitionError:工厂已经注册:用户错误当我运行用户规范时。我想创建具有不同名称和年龄的用户的多个对象。我的用户.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

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

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

或者,如果您需要鲍勃,请像这样称呼它:

FactoryBot.create :user, :bob

希望这有帮助。

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

工厂:

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

你需要验证/test/factories目录,也许rails生成器创建了一个工厂给用户

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

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

最新更新