使用夹具与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 
+0

为什么要使用工厂和夹具的混合物?工厂更换夹具。 – 2010-04-28 21:00:30

+0

你的test_helper.rb是怎么样的? – 2010-04-29 04:29:26

+9

我使用固定装置来处理种子后不会被任何人修改的固定数据。 – deb 2010-04-29 13:01:28

我对这个解决方案是创建含有型号代码生成我的种子数据的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任务。

+9

最好的办法是创建一个idempotent db/seeds.rb文件,所以无论它运行多少次,它仍然会达到相同的最终状态。在你的例子中,我会这样做:'Role.find_or_create_by_name(:name =>“Master”,:level => 99)'。 – 2010-09-30 10:28:22

另一种选择是在你的testspec目录之前,你的工厂增加seed.rb,需要在您的帮助文件:

require File.expand_path(File.dirname(__FILE__) + "/seed") 
require File.expand_path(File.dirname(__FILE__) + "/factories") 

的Rails 2.3