以下是运行rspec规范的错误消息:
/factory_girl-2.1.0/lib/factory_girl/registry.rb:38:in`add_as':已经定义:user(FactoryGirl :: DuplicateDefinitionError)
安装了factory_girl(2.1.0)和factory_girl_rails(1.2.0)。如果删除factory_girl 2.1.0,则此错误消息将消失(但会导致另一个未定义方法的错误)。但是,使用rspec在另一台笔记本电脑上运行时,相同的设置没有问题。
这是bundle show命令输出的一部分。
这是factory_girl和rspec的gemfile的一部分。
group :test do
# Pretty printed test output
gem "rspec-rails", ">= 2.0.0"
gem "cucumber-rails", ">=0.3.2"
gem 'webrat', ">= 0.7.2"
gem 'factory_girl_rails'
gem 'turn', :require => false
end
有什么想法?感谢。
答案 0 :(得分:6)
gem 'factory_girl_rails', :require => false
为我修好了:))
答案 1 :(得分:3)
在以前版本的Factory_Girls中,您需要执行
要求'工厂'
在您的规格/测试中。 使用最新的Factory Girls,您无需在规格中明确要求。 因此,如果您在文件中使用require'stage',请将其删除并尝试,DuplicateDefinitionError将会消失。
答案 2 :(得分:1)
我遇到了同样的问题。这意味着你无意中加载了两次工厂。您可以从工厂文件的顶部向日志输出一些文本,以查看它是否被加载两次。
我的问题在于Spork:它使用一些魔法来禁用factory_girl_rails工厂重装,你必须在spec_helper中以更可控的方式加载工厂,但由于某种原因它不适用于最新版本的gem。我刚刚删除了Spork,现在工作正常。
答案 3 :(得分:1)
rake db:test:prepare
这对我来说修复了同样的错误(不知道为什么),希望能帮到别人。
我当时认为这是spork + factory_girl_rails问题,但事实证明并非如此。我现在正在使用spork + fgr而没有麻烦。
答案 4 :(得分:1)
我最终摆脱了factory_girl_rails宝石解决了这个问题。还是不知道这是怎么回事。我的系统上没有安装运动。
感谢分享。
答案 5 :(得分:1)
有同样的问题。事实证明我有一个与我的工厂命名相同的规格,这导致错误。
我有 spec / models / user_spec.rb 和 spec / factories / user_spec.rb
我将 spec / factories / user_spec.rb 重命名为 spec / factories / user_factory.rb ,并且运行正常。
答案 6 :(得分:1)
该要求会导致重复定义,因为(显然)文件也已自动加载。 current docs虽然没有说清楚。
答案 7 :(得分:1)
在我的情况下,我在 spec / factories.rb 中以及在我生成模型时创建的factory_girl_rails(1.4.0)新文件中双重定义:用户工厂:< / p>
<强>规格/工厂/ users.rb的强>
删除了该文件,没有更多问题。
答案 8 :(得分:1)
此外,如果您将工厂文件命名为:factories/factory_user_spec.rb
rspec会认为它是一个规范并运行它,那么工厂女孩将需要它,将双重定义它。
答案 9 :(得分:1)
检查您是否有多个具有相同名称的工厂,这是导致错误的原因之一
尝试定义具有相同名称的多个工厂会引发错误。