sql >> データベース >  >> NoSQL >> MongoDB

実際にmongoに接続せずに、mongoに接続するメソッドをユニットテストするにはどうすればよいですか?

    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 。フィクスチャは、テスト用の機能する一貫性のあるデータセットを提供します。フィクスチャはブートストラップと考えてください。

    ビルド/テスト

    1. node-database-cleanerなどを使用して関連するデータベースをクリーンアップします 。
    2. mongodb-fixturesを使用して、フィクスチャを空のデータベースに入力します 。
    3. ビルドとテストを実行します。
    4. 繰り返します。

    一方...

    それでもしないと決めた場合 MongoDBを実行するのが正しいアプローチであり(そしてあなただけではありません)、ORMを使用してドライバーからのデータストア呼び出しを抽象化することが最善の策です(テストだけでなく、アプリケーション全体に対して)。たとえば、modelのようなものです 私はそれを使ったことがありませんが、データベースにとらわれないと主張しています。このアプローチを利用する場合でも、フィクスチャが必要になります およびenv構成 ただし、MongoDBをインストールする必要はありません。ここでの注意点は、選択したORMに翻弄されることです。



    1. Dockerを使用しているMongoDBは、最初の接続時にサーバー[localhost:27017]に接続できませんでした

    2. TravisCIでRedisを実行する

    3. ScaleGridがカナダでのMongoDBホスティングサービスを発表

    4. mongodbは複数の配列アイテムで検索します