当我启动开发中的rails控制台时,我看到FactoryGirl正在创建对象。显然我做错了,但是正确的方法是什么呢?这段代码让我的测试工作...
# tests/factories/board.rb
FactoryGirl.define do
factory :word do
sequence(:text) { |n| "FAKETEXT#{n}" }
end
factory :board do
trait :has_words do
words [
FactoryGirl.create(:word, id: "514b81cae14cfa78f335e250"),
FactoryGirl.create(:word, id: "514b81cae14cfa7917e443f0"),
FactoryGirl.create(:word, id: "514b81cae14cfa79182407a2"),
FactoryGirl.create(:word, id: "514b81cae14cfa78f581c534")
]
end
end
end
请注意,在我的config
目录中的任何文件中都没有提到工厂的任何内容,所以无论gem自动加载什么。我的Gemfile
的相关部分是:
# Stuff not to use in production
group :development, :test do
# Command-line debugger for development
gem "debugger"
# for unit testing - replace fixtures
gem "factory_girl_rails"
end
所以我可以把工厂女孩从开发环境中拿出来。但我认为,这些记录是在工厂使用之前创建的,这表明我的工厂写得不正确。但是如果你告诉我工厂写的是正确的,我就会这么做。
发布于 2013-08-31 19:45:56
也有同样的问题。有两种方法可以解决这个问题,
1.使用FactoryGirl语法在工厂内引用工厂。
用factory: :my_factory
替换FacotryGirl.create(:my_factory)
更多关于这个的信息,https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations
2. Gemfile中的factory_girl :require => false
这导致工厂在引导时生成对象,
group :development, :test do
gem 'factory_girl_rails'
end
为什么?在Rails引导过程中,Bundler需要development
组中的所有gem,而FactoryGirl似乎需要它们的所有工厂文件。请求工厂会计算Ruby代码,因此会调用FactoryGirl.create(:my_factory)
。
这可以通过以下方式修复:
# Gemfile
group :development, :test do
gem 'factory_girl_rails', :require => false
end
只需确保在您的测试环境中手动要求factory_girl ,EG
# spec_helper
require 'factory_girl'
发布于 2016-07-26 00:23:12
您只需将工厂女孩移出开发环境即可。
我也有同样的问题,所以我就这么做了
group :test do
gem 'faker'
gem 'factory_girl_rails'
end
工作起来就像一个护身符。
我在开发中根本没有使用这些gem,所以在测试中定义它们是正确的。
发布于 2013-04-21 01:32:39
对于每个工厂或模型,您必须放入不同的文件
spec/factories/word_factory.rb
spec/factories/board_factory.rb
所以每个工厂的内容,你可以做类似这样的事情:
FactoryGirl.define do
factory :board do
word
special_id
end
end
在您的测试文件夹中时,例如model/board_spec.rb
您可以创建您的对象
let(:word) { FactoryGirl.create(:word)
let(:board) { FactoryGirl.create(:board, word: word) }
我不确定这就是你需要的,如果我说错了,请纠正我
https://stackoverflow.com/questions/16092861
复制