运行用户规范时,我收到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
此代码有什么问题吗? 谢谢
答案 0 :(得分: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
或者如果您需要鲍勃,可以这样称呼它:
FactoryBot.create :user, :bob
希望这会有所帮助。
答案 1 :(得分: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
答案 2 :(得分:0)
您需要验证/test/factories
目录,也许rails generator为用户创建了工厂
答案 3 :(得分:-1)
我收到此错误,并通过将./spec/factories
目录中的所有文件收集到一个文件./spec/support/factory_models.rb
中并在require 'support/factory_models'
中添加rails_helper.rb
进行了修复
但是,每当生成新模型时,都必须通过挂起将新模型的工厂代码剪切/粘贴到factory_models.rb
中。