ruby-on-rails - 与factory_girl一起使用固定装置

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

建立以下工厂时:

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

最佳答案

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

关于ruby-on-rails - 与factory_girl一起使用固定装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732622/

相关文章:

ruby-on-rails - 防止为每个评论调用 upvote 模型

ruby-on-rails - 从Rails 2.3.8升级到4.0

android - Robotium 测试找不到 Activity 类

c# - 如何从 Type.GUID 创建对象

swift - 如何实现符合具有类型约束的协议(protocol)的通用基类并为这些通用类型实现工厂?

ruby-on-rails - 在 Rails 3 中将 session 变量初始化为数组

ruby-on-rails - 使用敏感信息(如密码)rails 保护数据库列

java - 用于单元测试的 Mockito 风格的 anyXXX 方法

php - 没有连接到数据库的 Laravel 模型工厂

c++ - 工厂 : how to pass temporary smart pointers to functions. C++