Mochaがテストファイルをロードする方法にデフォルトの設定順序はありません。
Mocha ディレクトリをスキャンするとき
ファイルを見つけるには、 fs.readdirSync
を使用します。
。この呼び出しは、 readdir(3)のラッパーです。コード>
、それ自体は順序を保証するものではありません。現在、実装の癖
が原因です fs.readdir
の出力 およびfs.readdirSync
Linux(およびおそらく一般的なPOSIXシステム)ではソートされますが、Windowsではソートされません 。さらに、ドキュメントに fs.readdir
と記載されているため、Linuxでのソートされた動作が最終的に削除される可能性があります。 ただのreaddir(3)
後者は順序を保証するものではありません。 Linuxで観察された動作はバグであるという議論があります(上記のリンク先の問題を参照してください)。
-sort
があることに注意してください Mochaがファイルを見つけた後にファイルをソートするオプション。ただし、これはデフォルトでオフになっています。
観察された動作は、読み込み順序だけでなく実行順序によっても説明できます 。何が起こるか:
-
Mochaはテストファイルをロードして実行します。したがって、ファイルの最上位にあるものはすべてすぐに実行されます 。これは、
test_helper.js
のコードが すぐに実行されます。describe
へのすべての呼び出し すぐにコールバックを実行します。 ただし、it
の呼び出し 後で実行するためにテストを記録します。 モカは発見 これを実行しているが実行していないテスト すぐに。 -
すべてのファイルが実行されると、Mochaはテストの実行を開始します。この時点で、
test_helper.js
のコード はすでに実行されており、テストは作成された接続の恩恵を受けています。
重大な警告 データベースへの接続は非同期操作であり、現在、 test_helper.js
の非同期操作を保証するものはありません。 テストが始まる前に完了します。それが今うまくいくのは運だけです。
これが私なら、接続の作成をグローバル非同期の before
に配置します 針。 (グローバル 前コード> テストファイルに表示されるフックは、他のファイルに表示されるテストであっても、テストの前に実行されます。 )または、
-delay
を使用します
run()
を明示的に呼び出します 接続が保証された後にスイートを開始します。