1

私の Ruby バージョンは ruby​​ 1.9.3p385 です。Rails のバージョンは 3.2.12 です。

以下を使用して、テスト データベースをロードします。

rake db:seed RAILS_ENV=test

すべてがうまく機能します。Factory Girlのすべてのものがうまくロードされています。

test/factories.rb の内容には工場が含まれています。db/seeds.rb の内容は次のとおりです。

FactoryGirl.create(:music_categorization)
FactoryGirl.create(:dance_categorization)

ここで、次のコマンドを使用してテストを実行すると:

rake test

Rails はすべてのシード データを削除し、テストは失敗します。「レーキ テスト」でデータが削除されないようにする方法が欲しいです。

私が行った他のルートは、この質問で述べたように、「rake test」コマンドの一部としてシード データをロードすることでした。しかし、それは結局、テストデータを 2 回ロードすることになります (基本的に、何らかの理由で db/seeds.rb が 2 回呼び出されます)。私はそのルートを放棄し、テストを実行するために次のことをしたいだけです:

rake db:seed RAILS_ENV=test
rake test

どんな助けでも大歓迎です。基本的に、レーキ テストでデータが削除されないようにするか、db/seeds.rb を 2 回呼び出さないようにする方法を見つけたいと考えています。

4

2 に答える 2

1

最初に、一般に、テストでシード データを使用するべきではないとだけ言っておきます。テストは空のデータベースで実行することが想定されており、各テストに必要なデータのみを作成します。

あなたの場合、シード データの意味を理解していないようです。これは基本的に、アプリケーションが適切に動作するために必要なコア データです。テストでいくつかのモデルをインスタンス化する必要がある場合は、単純に実行します (rspec を使用していると仮定します)。

    before(:each) do
      FactoryGirl.create(:music_categorization)
      FactoryGirl.create(:dance_categorization)
    end

それでもシード データを使用してテストを実行したい場合は、いつでも を試して実行できますrspec。これにより、テスト データベースをそのままにして、すべての rspec サンプルが実行されます。しかし、信じてください、それはあなたが望むものではありません。

于 2013-02-27T23:36:04.287 に答える
1

私の知る限り、テスト用のデータをロードするために使用するのは通常ではありません。通常db:seed、開発目的でのみシードデータをロードするために使用されます。

代わりに、実際のテスト ファイルにテスト データを作成する必要があります。通常、テスト データは、 database_cleanerなどを使用して各テストの後に削除されるため、各テストは空のデータベースから開始されます。

たとえば、rspecでは、letブロック、beforeブロック、またはテスト自体にテストデータをロードできます。

require 'spec_helper'

describe Page do
  let(:user) { FactoryGirl.create(:user) }

   before do
     # create some data
   end

  it '#name returns XYZ' do
    page = FactoryGirl.create(:page, :user => user)
    page.description.should == 'XYZ'
  end

  it '#description returns ABC' do
    page = FactoryGirl.create(:page, :user => user)
    page.description.should == 'ABC'
  end
end
于 2013-02-27T23:42:25.063 に答える