9

次の工場を建設する場合:

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

ResumeType.firstnilを返し、エラーが発生します。

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

My solution to this was to create a db/seeds.rb file which contained model code to generate my seed data:

# 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)

And then include it in my 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"

(To be fair, I haven't managed to get autospec to play nice with this yet as it keeps duplicating my seed data, but I haven't tried all that hard either.)

This also has the benefit of being Rails 3 ready and working with the rake db:seed task.

于 2010-04-30T03:41:55.467 に答える
0

もう 1 つのオプションは、またはディレクトリに追加seed.rbし、ファクトリの前にヘルパー ファイルでそれを要求することです。testspec

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

レール 2.3

于 2011-11-07T16:16:30.340 に答える