5

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 以外で再現することはできませんでした。

一体何が起こっているのですか?

4

1 に答える 1