web-dev-qa-db-ja.com

テストを実行する前にテストデータベースをクリーンアップする

テストスイートを実行する前にデータベースをクリーンアップするための最良の方法は何ですか(これを行うためのnpmライブラリまたは推奨される方法はありますか)。

Before()関数について知っています。

Node/express、mocha、sequelizeを使用しています。

21
robzolkos

before関数は、データベースをクリーンアップする場合とほぼ同じです。データベースを一度だけクリーンアップする必要がある場合、つまりすべてのテストを実行する前に、グローバルbefore関数を別のファイルに含めることができます。

globalBefore.js

before(function(done) {
   // remove database data here
   done()
}) 

single-test-1.js

require('./globalBefore)
// actual test 1 here

single-test-2.js

require('./globalBefore)
// actual test 2 here

GlobalBeforeは、2回必要になった場合でも、1回しか実行されないことに注意してください。

テストの原則

テストでは、データベースなどの外部依存関係の使用を制限するようにしてください。外部依存関係が少ないほど、テストが容易になります。すべての単体テストを並行して実行できるようにする必要があり、データベースなどの共有リソースがこれを困難にします。

テスト可能なJavaScriptの記述に関するこのGoogleTechの講演をご覧ください http://www.youtube.com/watch?v=JjqKQ8ezwKQ

rewire モジュールも見てください。関数をスタブアウトするのに非常にうまく機能します。

28
Noah

私は通常このようにします(たとえばUserモデルの場合):

_describe('User', function() {
  before(function(done) {
    User.sync({ force : true }) // drops table and re-creates it
      .success(function() {
        done(null);
      })
      .error(function(error) {
        done(error);
      });
  });

  describe('#create', function() {
    ...
  });
});
_

sequelize.sync({force: true})もあり、allテーブルを削除して再作成します(.sync()について説明します ここ )。

17
robertklep

私はこのlibを作成して、テスト用のフィクスチャをクリーンアップしてインポートしました。

このようにして、フィクスチャをインポートし、テストしてからデータベースをクリーンアップできます。

以下をご覧ください。

before(function (done) {
   prepare.start(['people'], function () {
      done();
   });
});

after(function () {
   prepare.end();
});

https://github.com/diogolmenezes/test_prepare

0
Diogo Menezes