web-dev-qa-db-ja.com

db / seedsでFactoryGirlを使用するにはどうすればよいですか?

これを行うことは可能ですか?

もしそうなら、どのようにそれを行うことができますか?

26
fespinozacast

(この回答はRails 3.0.7)で機能します

キャッチは、Gemfileを設定する方法であることがわかりました-の線に沿って何かをする必要があります

gem 'factory_girl'

group :test do
  gem 'factory_girl_Rails'
end

factory_girl_Rails環境の外に:testがある場合に問題が見つかりましたが、これを理解することができませんでした(おそらく、Rails dosクラスキャッシング?)

それが終わったら、私は実際にlibのライブラリからデータをロードするのが好きです...

require 'factory_girl'
require 'spec/factories/user_factory'

module Seeds

  class SampleUsers

    def self.run
    u = Factory(:user)
  end
end

そして、db:seed内からこのメソッドを実行します。

Seeds::SampleUsers.run
14
Laurie Young

require 'factory_girl_Rails'ファイルにdb/seeds.rbを追加するだけです。これにより、工場にアクセスできるようになります。

26
Michael Greenly

FactoryGirlのメンテナであるJoshClayton、 シードファイルでFactoryGirlを使用しないことをお勧めします 。彼は代わりにプレーンなActiveRecordを使用することを提案しています。

14
Dan Croak

db /seeds.rb内

require 'factory_girl_Rails'

10.times do
  FactoryGirl.create :user
end
12

次のコードをspec_helper.rbに挿入すると、必要なデータのインスタンスがいくつか作成されます(この場合はyamlファイルの「製品」)。

seeds_file = File.join(Rails.root, 'db', 'seeds.yml')
config = YAML::load_file(seeds_file)
config["products"].each do |product|
  FactoryGirl.create(:product, product) if !Product.find_by_name(product['name'])    
end
2
faber