使用夹具与factory_girl
当建立以下工厂:使用夹具与factory_girl
Factory.define :user do |f|
f.sequence(:name) { |n| "foo#{n}" }
f.resume_type_id { ResumeType.first.id }
end
ResumeType.first
回报零,我得到一个错误。
ResumeType
记录通过灯具加载。我使用控制台进行检查,条目在那里,表格不是空的。
我在factory_girl邮件列表中找到了一个类似的例子,它应该可以工作。
我错过了什么?我必须以某种方式告诉factory_girl在运行测试之前设置灯具吗?
这是我test_helper是什么样子:
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
self.use_instantiated_fixtures = false
fixtures :all
end
我对这个解决方案是创建含有型号代码生成我的种子数据的DB/seeds.rb文件:
# Create the user roles
Role.create(:name => "Master", :level => 99)
Role.create(:name => "Admin", :level => 80)
Role.create(:name => "Editor", :level => 40)
Role.create(:name => "Blogger", :level => 30)
Role.create(:name => "User", :level => 0)
然后包括它在我spec_helper.rb:
ENV["RAILS_ENV"] = 'test'
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
require 'spec/autorun'
require 'spec/rails'
require "#{Rails.root}/db/seeds.rb"
(为了公平起见,我还没有设法让AU因为它不断重复我的种子数据,所以我还没有尝试过所有这些。)
这也有Rails 3准备好并且可以使用rake db:seed任务。
最好的办法是创建一个idempotent db/seeds.rb文件,所以无论它运行多少次,它仍然会达到相同的最终状态。在你的例子中,我会这样做:'Role.find_or_create_by_name(:name =>“Master”,:level => 99)'。 – 2010-09-30 10:28:22
另一种选择是在你的test
或spec
目录之前,你的工厂增加seed.rb
,需要在您的帮助文件:
require File.expand_path(File.dirname(__FILE__) + "/seed")
require File.expand_path(File.dirname(__FILE__) + "/factories")
的Rails 2.3
为什么要使用工厂和夹具的混合物?工厂更换夹具。 – 2010-04-28 21:00:30
你的test_helper.rb是怎么样的? – 2010-04-29 04:29:26
我使用固定装置来处理种子后不会被任何人修改的固定数据。 – deb 2010-04-29 13:01:28