MongoDBをデータストアとして使用する単体テストコードに関連するSOの回答がいくつかあります。
- node.jsでデータベースをモックしますか?
- MongodbDatabaseNode.jsのモック/テスト
- 統合テストの実行時にMongoDBを埋め込む
- 類似:オンライン機能を備えたユニットテストクラス
これらのソリューションの統合を試みます。
前文
何よりもまず、すべき テストの実行中にMongoDBを実行する必要があります。 MongoDBのクエリ言語は複雑であるため、クエリが計画どおりに実行され、アプリケーションが結果に適切に応答していることを確認するには、安定したMongoDBインスタンスに対して正当なクエリを実行する必要があります。ただし、これを念頭に置いて、絶対にしないでください。 本番システムに対してテストを実行しますが、代わりに統合環境の周辺システムに対してテストを実行します。これは、CIソフトウェアと同じマシン上にある場合もあれば、単に比較的近いマシン上にある場合もあります(プロセスの観点から、必ずしもネットワークや地理的に言えば)。
このENVはフットプリントが低く、完全にメモリ(リソース1)(リソース2)で実行される可能性がありますが、必ずしも実稼働ENVと同じパフォーマンス特性を必要とするわけではありません。 (パフォーマンステストを行う場合は、とにかくCIとは別の環境で処理する必要があります。)
セットアップ
-
mongod
をインストールします CI専用のサービス。 replセットおよび/またはシャーディングが懸念される場合(たとえば、書き込みの懸念、$isolated
の使用はありません など)、複数のmongod
を実行することで、クラスター化された環境を模倣することができます。 インスタンス(1つの構成、shard + replの2x2データ)およびmongos
いくつかのinit.dスクリプト/微調整またはdockerのようなものを使用した同じマシン上のインスタンス。 - 環境固有の構成を使用する アプリケーション内(.jsonファイルを介して埋め込まれるか、/ etc、/ home / user / .your-appなどの場所に埋め込まれます)。アプリケーションは、
NODE_ENV=int
のようなノード環境変数に基づいてこれらをロードできます。 。これらの構成内では、db接続文字列は異なります。 そうでない場合 env固有の構成を使用して、アプリケーションのランタイム設定(つまり、「local」、「dev」、「int」、「pre」、「prod」など)を抽象化する手段としてこれを開始します。 リクエストに応じてサンプルを提供できます。 - アプリケーション/テストスイートにテスト指向のフィクスチャを含めます。 リンクされた質問の1つで述べたように、MongoDBのNode.jsドライバーはいくつかのヘルパーライブラリをサポートしています:
mongodb-fixtures
およびnode-database-cleaner
。フィクスチャは、テスト用の機能する一貫性のあるデータセットを提供します。フィクスチャはブートストラップと考えてください。
ビルド/テスト
-
node-database-cleaner
などを使用して関連するデータベースをクリーンアップします 。 -
mongodb-fixtures
を使用して、フィクスチャを空のデータベースに入力します 。 - ビルドとテストを実行します。
- 繰り返します。
一方...
それでもしないと決めた場合 MongoDBを実行するのが正しいアプローチであり(そしてあなただけではありません)、ORMを使用してドライバーからのデータストア呼び出しを抽象化することが最善の策です(テストだけでなく、アプリケーション全体に対して)。たとえば、model
のようなものです 私はそれを使ったことがありませんが、データベースにとらわれないと主張しています。このアプローチを利用する場合でも、フィクスチャが必要になります およびenv構成 ただし、MongoDBをインストールする必要はありません。ここでの注意点は、選択したORMに翻弄されることです。