web-dev-qa-db-ja.com

テスト中のMocha beforeEachおよびafterEach

Mochaを使用してテストサーバーをテストしようとしています。これは私が使用する次のコードで、別の同様の投稿で見つかったものとほぼ同じです。

beforeEach(function(done) {
    // Setup
    console.log('test before function');
    ws.on('open', function() {
        console.log('worked...');
        done();
    });
    ws.on('close', function() {
        console.log('disconnected...');
    });
});

afterEach(function(done) {
    // Cleanup
    if(readyState) {
        console.log('disconnecting...');
        ws.close();
    } else {
        // There will not be a connection unless you have done() in beforeEach, socket.on('connect'...)
        console.log('no connection to break...');
    }
    done();
});

describe('WebSocket test', function() {
    //assert.equal(response.result, null, 'Successful Authentification');
});

問題は、このドラフトを実行すると、表示されるはずのconsole.logがコマンドプロンプトに表示されないことです。何が間違っているのか説明していただけますか?

13
zamponotyropita

Georgiは、テストを指定するためにit呼び出しが必要ですが、必要でない場合はファイルにトップレベルのdescribeを持つ必要はないことは正しいです。単一のdescribeを多数のit呼び出しに置き換えることができます。

it("first", function () {
    // Whatever test.
});

it("second", function () {
    // Whatever other test.
});

テストスイートが小さく、1つのファイルのみで構成されている場合、これは非常にうまく機能します。

テストスイートが大きい場合、または複数のファイルに分散している場合は、非常に強くbeforeEachafterEachitと一緒に入れることをお勧めしますdescribe。スイート内のすべてのテストがbeforeEachまたはafterEachによって実行される作業を必要とするという絶対的な肯定的な場合を除きます。 (Mochaを使用して複数のテストスイートを作成しましたが、テストごとに実行する必要のあるbeforeEachまたはafterEachを一度も持っていません。)

describe('WebSocket test', function() {
    beforeEach(function(done) {
        // ...
    });

    afterEach(function(done) {
       // ...
    });

    it('response should be null', function() {
        assert.equal(response.result, null, 'Successful Authentification');
    });
});

beforeEachafterEachdescribeの中にこのように配置しない場合、Webソケットをテストするためのファイルと、データベース操作をテストするための別のファイルがあるとします。データベース操作テストを含むファイル内のテストでは、alsoの前後にbeforeEachおよびafterEachが実行されますそれら。 beforeEachafterEachを上記のようにdescribeの内側に配置すると、それらがWebソケットテストに対してのみ実行されることが保証されます。

23
Louis

この例にはテストがありません。実行するテストがない場合、前後のフックは呼び出されません。次のようなテストを追加してみてください。

describe('WebSocket test', function() {
    it('should run test and invoke hooks', function(done) {
        assert.equal(1,1);
        done(); 
    });
});
7
Georgi

beforeEach()およびafterEach()フックを実行するには、suite-callback(eg it)内にtest-callback(eg describe)が必要です。 。詳細 https://mochajs.org/#run-cycle-overview

0
OmmyJay