10

Rails プロジェクトをテストするために、いくつかの精巧な FactoryGirl ファクトリ定義を既に作成しており、この目的のためにはうまく機能しています。

スクリプト (Ruby、Rake など) で同じ定義を使用して、正しく関連付けられた有効なレコードの大規模なコレクションを Rails 開発データベースに追加したいと考えています。

これは一般的なタスクだと思いますが、役立つリファレンスが見つかりません。

ベストプラクティスとは? どうやって進める?

工場が にあるとしspec/factories.rbます。次は何?ありがとう。

アップデート

まだ苦労しています。これをrake課題にしてみました。

require 'factory_girl'
require 'spec/factories'

namespace :db do
  desc "Fill database with trial data"
  task :populate => :environment do
    Rake::Task['db:reset'].invoke
    50.times do |n|
      # Make a consistent set of related records.
      team = FactoryGirl.create(:team, :completed)
      team.members << FactoryGirl.create(:member)
      FactoryGirl.create(:design, :team => team)
    end
  end
end

残念ながら、これは私の を見つけることができませんfactories.rb:

rake aborted!
cannot load such file -- spec/factories

それ以外の場所では、プロジェクトのルート相対の require パスが正常に機能します。秘密の握手とは?

4

2 に答える 2

0

@Gene あなたはこのパズルを解くのに近づいていました。私はあなたがこれから1つの道を離れていたと思います。私は RSpec を使用していないため、パスは多少異なる可能性がありますが、一般的な考え方は理解できました。

namespace :db do
  desc "Fill database with trial data"
  task :populate => :environment do
    require 'factory_girl'
    require Rails.root + 'spec/factories'

    Rake::Task['db:reset'].invoke
    Rake::Task['db:seed'].invoke
    50.times do |n|
      # Make a consistent set of related records.
      team = FactoryGirl.create(:team, :completed)
      team.members << FactoryGirl.create(:member)
      FactoryGirl.create(:design, :team => team)
    end
  end
end

必要なファクトリ ファイルのパスを正確に指定するだけで、リセット後に rake db:seed も追加します。

DB シードは、開発時にデータベースを埋めるためのものではありませんが、新しいアプリケーションを適切な情報でブートストラップして正常に動作できるようにするためのものです。すなわち。管理者ユーザーとデフォルト ステータスの作成

于 2015-03-12T20:49:22.937 に答える