Mongoに接続するメソッドをテストするテストを作成しようとしていますが、実際にmongoを実行してテストに成功させるためにそれに接続する必要はありません。
Mongoデーモンが実行されているときに成功する現在のテストを次に示します。
describe('with a valid mongo string parameter', function() {
it('should return a rejected promise', function(done) {
var con = mongoFactory.getConnection('mongodb://localhost:27017');
expect(con).to.be.fulfilled;
done();
});
});
mongoFactory.getConnectionコード:
getConnection: function getConnection(connectionString) {
// do stuff here
// Initialize connection once
MongoClient.connect(connectionString, function(err, database) {
if (err) {
def.reject(err);
}
def.resolve(database);
});
return def.promise;
}
MongoDBをデータストアとして使用する単体テストコードに関連するSO回答がいくつかあります。
これらのソリューションの統合を試みます。
何よりもまず、テストを実行している間MongoDBを実行する必要があります MongoDBのクエリ言語は複雑であるため、クエリが計画どおりに実行され、アプリケーションが結果に適切に応答していることを確認するには、安定したMongoDBインスタンスに対して正当なクエリを実行する必要があります。ただし、これを念頭に置いて、テストを本番システムに対して決して実行しないでください代わりに、統合環境に対して周辺システムを実行してください。これは、CIソフトウェアと同じマシン上にある場合もあれば、それに比較的単純に近い場合もあります(プロセスに関しては、必ずしもネットワークや地理的には必要ありません)。
このENVはフットプリントが低く、完全にメモリ( resource 1 )( resource 2 )で実行できますが、必ずしも本番環境ENVと同じパフォーマンス特性を必要とするわけではありません。 (パフォーマンステストを行う場合は、これをCIとは別の環境で処理する必要があります。)
mongod
サービスをインストールします。replセットやシャーディングが懸念される場合(例:書き込みに関する懸念、$isolated
の使用なし)など)、複数のmongod
インスタンス(1つの構成、shard + replの2x2データ)とmongos
インスタンスを同じマシン上で実行して、クラスター環境を模倣することができます。 init.dスクリプト/微調整またはdockerのようなもの。NODE_ENV=int
のようなノード環境変数 に基づいてこれらをロードできます。これらの構成内では、db接続文字列は異なります。環境固有の設定を使用していない場合、アプリケーションのランタイム設定(つまり、「local」、「dev」、「int」、「 pre」、「prod」など)。 リクエストに応じてサンプルを提供できます。mongodb-fixtures
およびnode-database-cleaner
。フィクスチャは、テスト用の実用的で一貫性のあるデータセットを提供します。それらをブートストラップと考えてください。node-database-cleaner
のようなものを使用して、関連するデータベースをクリーンアップします。mongodb-fixtures
を使用して、フィクスチャを空のデータベースに追加します。それでもnotMongoDBを実行するのが正しいアプローチであると判断した場合( そして、あなたが唯一のものではない )、データストア呼び出しをORMを備えたドライバーが最善の策です(テストだけでなく、アプリケーション全体に対して)。たとえば、 model
はデータベースに依存しないと主張している のようなものですが、使用したことはありません。このアプローチを利用しても、fixturesおよびenv構成が必要ですが、MongoDBをインストールする必要はありません。ここでの注意点は、選択したORMのなすがままであるということです。