私は別のテストデータベースを提案します。これは軽いものであり、そこにあるデータを知りたい(テストすることができます!)。すべてのビジネスルールを処理できる基本データセットは、SQLファイル(またはエクスポートメソッド)としてエクスポートできます。
通常、アプリケーションにはデータベースへの接続があり、テストフレームワークには、テストを開始する前にメソッドを実行するためのアプローチがあります。ここでは、テストDBを指定します。データベースアクセスオブジェクト(DAO)またはスクリプトメソッドは、メソッドパラメータまたはrequireステートメントなど、何らかの方法でメイン接続を利用します。
たとえば、knex moduleを使用して接続しますDBに渡してクエリを作成します。 their docsで指定されているように、私は単一のDB接続を初期化して参照します。テストスイートを実行する前に、私はテスト用DB
var Knex = require('knex');
Knex.knex = Knex.initialize({
client : 'mysql',
connection : {
host : '127.0.0.1',
user : 'root',
password : 'root',
database : 'testdb',
charset : 'utf8'
}
});
であるとは私の接続を設定することができ、私のユニットテストで今すぐ
var knex = require('knex').knex;
:
var Knex = require('knex');
Knex.knex = Knex.initialize({
client : 'mysql',
connection : {
host : 'my.domain.com',
user : 'dbrole',
password : 'password',
database : 'productiondb',
charset : 'utf8'
}
});
私のDAOは、このような接続を取得します
あなたはそれを持っています!テストとプロダクションではまったく同じコードが使用され、プロダクションDBはテストから分離されます。このパターンは多くのフレームワークで動作することができます。したがって、テストDBを使いこなす場合はテストを修正し、すべてのテストが完了したらデフォルトにリストアする必要があります。
編集:ちなみに、knexはpostgreで動作し、純粋なノードJSでクエリを作成する楽しい方法です。生のSQLも実行できます。
これらのAPIエンドポイントまたはモデルのテストはありますか? – srquinn
APIエンドポイントの場合。私はすべてのルートをテストし、私が考えることができるあらゆる辺のケースを試し、良い、悪い要求を試みる。これらの要求は、データベース内に行を作成することが多く、次のテストで使用されます。私はこれをやっているとは確信していません。 –
テストを緊密にしたい場合は、実際にAPIエンドポイントをテストする範囲にない別の障害ポイント(db接続、スキーマの問題など)を設定するのではなく、データを嘲笑することをおすすめします。 REALデータベースに接続すると、テストが単体テストから統合テストに変換されます。両方とも彼らの場所がありますが、それらを混ぜ合わせるべきではありません。 – srquinn