RSpecを使用したテストデータベースでの移行生成レコードの作成/再作成

StackOverflow https://stackoverflow.com/questions/270969

  •  06-07-2019
  •  | 
  •  

質問

データベースにレコードを挿入するRailsの移行があります。カテゴリモデルはこのレコードに依存します。 RSpecは各例の前にデータベースをクリアするため、このレコードは失われ、さらに、RSpecは移行からデータベースを生成しないため、作成されないようです。データベースでこのレコードを作成/再作成する最良の方法は何ですか? before(:all)を使用しますか?

役に立ちましたか?

解決

RSpecがデータベースをクリアするのではなく、Railsのrake:db:prepareタスクがdevデータベースの schema (コンテンツではなく)を* _test dbにコピーすることです

はい、トランザクションは個々の例ごとにラップされるため、 before(:all)を使用できますが、単純なフィクスチャファイルでも同じ仕事をします。

(この問題には、より複雑な一般的な解決策があります。「dev」サービスと「test」サービスが完全に独立したインスタンスになるサービス指向アーキテクチャに移行します。テストサービスで開発データベースを使用し、rake:db:prepareを無効にし、再生成時に移行からテストサービスをビルドします。その後、移行とデータ変換をテストできます。

他のヒント

db / migrationにdataという名前のフォルダーを作成し、そこにymlフィクスチャーを追加します。ケースでは、categories.yml

次に、次のように移行を作成します

def self.up
 down
 directory = File.join( File.dirname(__FILE__), "data" )
 Fixtures.create_fixtures( directory, "categories" )
end

def self.down
  Category.delete_all
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top