9

在建造以下工厂时:

Factory.define :user do |f|
  f.sequence(:name) { |n| "foo#{n}" }
  f.resume_type_id { ResumeType.first.id }
end

ResumeType.first返回nil,我得到一个错误。

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
4

2 回答 2

6

我对此的解决方案是创建一个 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"

(公平地说,我还没有设法让 autospec 很好地使用它,因为它不断复制我的种子数据,但我也没有那么努力。)

这还具有准备好 Rails 3 并使用 rake db:seed 任务的好处。

于 2010-04-30T03:41:55.467 回答
0

另一种选择是seed.rb在您的testorspec目录中添加并在您的工厂之前在您的帮助文件中要求它:

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

导轨 2.3

于 2011-11-07T16:16:30.340 回答