【问题标题】:Using fixtures with factory_girl使用带有 factory_girl 的固定装置
【发布时间】:2010-04-28 19:43:12
【问题描述】:

建造以下工厂时:

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

【问题讨论】:

  • 为什么要混合使用工厂和固定装置?工厂更换固定装置。
  • 你的 test_helper.rb 是什么样子的?
  • 我正在为固定数据使用固定数据,这些数据在播种后不会被任何人更改。
  • 我在问题中添加了 test_helper.rb
  • 在我的情况下,回答“为什么要混合使用工厂和固定装置”的问题?以小步骤从一个到另一个。

标签: ruby-on-rails unit-testing factory fixtures factory-bot


【解决方案1】:

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

【讨论】:

  • 最好的办法是创建一个幂等的 db/seeds.rb 文件,因此无论它运行多久,它仍然会达到相同的最终状态。在您的示例中,我会这样做:Role.find_or_create_by_name(:name => "Master", :level => 99).
【解决方案2】:

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

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

Rails 2.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多