Mochaでテストしているnode.js + Express Webサーバーがあります。テスト ハーネス内で Web サーバーを起動し、mongodb に接続して出力を探します。
describe("Api", function() {
before(function(done) {
// start server using function exported from another js file
// connect to mongo db
});
after(function(done) {
// shut down server
// close mongo connection
});
beforeEach(function(done) {
// empty mongo collection
});
describe("Events", function() {
it("Test1", ...);
it("Test2", ...);
it("Test3", ...);
it("Test4", ...);
it("Test5", ...);
});
});
Mocha が一度に 4 つ以上のテストを実行すると、タイムアウトになります。
4 passing (2s)
1 failing
1) Api Test5:
Error: timeout of 2000ms exceeded
at null.<anonymous> (C:\Users\<username>\AppData\Roaming\npm\node_modules\moch\lib\runnable.js:165:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
5 つのテストのいずれかをスキップすると、正常に合格します。テストの順序を変更すると、同じ問題が発生します (タイムアウトになるのは常に最後のテストです)。テストをグループに分割しても、状況は変わりません。
調べてみると、最終テストのリクエストは(httpモジュールを使用して)Webサーバーに送信されていますが、速達で受信されていません。1 つの要求を行うテストもあれば、複数の要求を行うテストもあります。どちらをスキップするかは結果には影響しません。この動作を mocha 以外で再現することはできませんでした。
一体何が起こっているのですか?