テストスイートを実行する前にデータベースをクリーンアップするための最良の方法は何ですか(これを行うためのnpmライブラリまたは推奨される方法はありますか)。
Before()関数について知っています。
Node/express、mocha、sequelizeを使用しています。
before
関数は、データベースをクリーンアップする場合とほぼ同じです。データベースを一度だけクリーンアップする必要がある場合、つまりすべてのテストを実行する前に、グローバルbefore
関数を別のファイルに含めることができます。
before(function(done) {
// remove database data here
done()
})
require('./globalBefore)
// actual test 1 here
require('./globalBefore)
// actual test 2 here
GlobalBeforeは、2回必要になった場合でも、1回しか実行されないことに注意してください。
テストでは、データベースなどの外部依存関係の使用を制限するようにしてください。外部依存関係が少ないほど、テストが容易になります。すべての単体テストを並行して実行できるようにする必要があり、データベースなどの共有リソースがこれを困難にします。
テスト可能なJavaScriptの記述に関するこのGoogleTechの講演をご覧ください http://www.youtube.com/watch?v=JjqKQ8ezwKQ
rewire モジュールも見てください。関数をスタブアウトするのに非常にうまく機能します。
私は通常このようにします(たとえば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()
について説明します ここ )。
私はこのlibを作成して、テスト用のフィクスチャをクリーンアップしてインポートしました。
このようにして、フィクスチャをインポートし、テストしてからデータベースをクリーンアップできます。
以下をご覧ください。
before(function (done) {
prepare.start(['people'], function () {
done();
});
});
after(function () {
prepare.end();
});