在 spec/factories/post_factory.rb 中:
FactoryGirl.define do
factory :post do
user
title Faker::Lorem.sentence
body Faker::Lorem.paragraphs
end
end
有了这个,我收到了这个错误:
... factory_girl-2.6.1/lib/factory_girl/registry.rb:39:in `add_as': Factory already registered: post (FactoryGirl::DuplicateDefinitionError)
如果我将factory :post
更改factory :a_post, class: Post
或任何其他名称,它就可以正常工作。 我定义的唯一其他工厂是用户和会话(这些工作正常)。
我做错了什么,还是有一些自动定义的内部后工厂阻止我使用该名称?
有几个潜在的问题,假设你 _100% 肯定_不存在其他后工厂(这是我要检查的第一件事)。 你在使用factory_girl_rails
gem 和 Rails 3 吗? 如果是,请确保在您的 spec_helper 或测试期间加载的任何其他文件中的任何位置都不需要factory_girl_rails
。 另外,请确保您没有调用FactoryGirl.find_definitions
,这将加载所有工厂; 运行两次是查看此错误的可靠方法。 最后,你在任何地方打电话给require "spec/factories/post_factory"
吗? factory_girl_rails
将加载所有工厂,因此这是不必要的。
默认情况下,FactoryGirl 不会为您创建任何工厂,因此它不会干扰您的工厂。
好的。 显然,当我生成 post 模型时,创建了一个 test/factories/posts.rb,但由于我使用 RSpec,所以我只在 spec 目录中查找。
我删除了它,一切正常。 谢谢。
啊,厉害! 我想这很可能是罪魁祸首。
最有用的评论
有几个潜在的问题,假设你 _100% 肯定_不存在其他后工厂(这是我要检查的第一件事)。 你在使用
factory_girl_rails
gem 和 Rails 3 吗? 如果是,请确保在您的 spec_helper 或测试期间加载的任何其他文件中的任何位置都不需要factory_girl_rails
。 另外,请确保您没有调用FactoryGirl.find_definitions
,这将加载所有工厂; 运行两次是查看此错误的可靠方法。 最后,你在任何地方打电话给require "spec/factories/post_factory"
吗?factory_girl_rails
将加载所有工厂,因此这是不必要的。默认情况下,FactoryGirl 不会为您创建任何工厂,因此它不会干扰您的工厂。