RSpecを使用したテストデータベースでの移行生成レコードの作成/再作成
-
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
所属していません StackOverflow