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

Mochaがテストスイートで最初にロードするファイルを知る方法

    Mochaがテストファイルをロードする方法にデフォルトの設定順序はありません。

    Mocha ディレクトリをスキャンするとき ファイルを見つけるには、 fs.readdirSyncを使用します。 。この呼び出しは、 readdir(3) 、それ自体は順序を保証するものではありません。現在、実装の癖 が原因です fs.readdirの出力 およびfs.readdirSync Linux(およびおそらく一般的なPOSIXシステム)ではソートされますが、Windowsではソートされません 。さらに、ドキュメントに fs.readdir と記載されているため、Linuxでのソートされた動作が最終的に削除される可能性があります。 ただのreaddir(3) 後者は順序を保証するものではありません。 Linuxで観察された動作はバグであるという議論があります(上記のリンク先の問題を参照してください)。

    -sortがあることに注意してください Mochaがファイルを見つけた後にファイルをソートするオプション。ただし、これはデフォルトでオフになっています。

    観察された動作は、読み込み順序だけでなく実行順序によっても説明できます 。何が起こるか:

    1. Mochaはテストファイルをロードして実行します。したがって、ファイルの最上位にあるものはすべてすぐに実行されます 。これは、 test_helper.jsのコードが すぐに実行されます。 describeへのすべての呼び出し すぐにコールバックを実行します。 ただし、 itの呼び出し 後で実行するためにテストを記録します。 モカは発見 これを実行しているが実行していないテスト すぐに。

    2. すべてのファイルが実行されると、Mochaはテストの実行を開始します。この時点で、 test_helper.jsのコード はすでに実行されており、テストは作成された接続の恩恵を受けています。

    重大な警告 データベースへの接続は非同期操作であり、現在、 test_helper.jsの非同期操作を保証するものはありません。 テストが始まる前に完了します。それが今うまくいくのは運だけです。

    これが私なら、接続の作成をグローバル非同期の beforeに配置します 針。 (グローバル テストファイルに表示されるフックは、他のファイルに表示されるテストであっても、テストの前に実行されます。 )または、 -delayを使用します run()を明示的に呼び出します 接続が保証された後にスイートを開始します。



    1. null値を無視するmongoDB3.2の一意のインデックス

    2. なぜこれは非同期関数の外部で動作するのを待つのですか?

    3. 同じmongodbクエリでGroupbycountとdistinctcountを選択します

    4. mongodb cppドライバー(ubuntuサーバーx64)にlboost_thread-mtがありません