4

グローバル イベント エミッターに基づいて実行される一連のモジュールがあります。それらは、次のように時系列の一連のイベントに基づいて実行されます。

  1. 起動準備完了
  2. サーバーが作成されました (boot.ready イベントのため)
  3. サーバーが構成されている (server.created イベントのため)

そのため、時系列でテストを実行する server-test.js を作成する必要があります。

これはモカで可能ですか?以下のようなものですか?

var EventEmitter2      = require('eventemitter2').EventEmitter2,
    should             = require('should');

describe('server', function() {

    var mediator = new EventEmitter2({
            wildcard: false
        });

    require('../../src/routines/server/creator')(mediator);
    require('../../src/routines/server/configurer')(mediator);

    it('should be created after boot', function(done) {
        mediator.once('server.created', function(server) {
            server.should.exist;
            done();
        });

        it('should be configured after created', function(done) {
            mediator.once('server.configured', function() {
                done();
            });
        });

        mediator.emit('boot.ready');
    });
});

このグローバル イベント エミッターの動作方法について混乱があるように思われたため、これがserver/creator.jsモジュールです。

module.exports = function(mediator) {

    var express = require('express');

    mediator.once('boot.ready', function() {

        var server = express.createServer();

        //event: server created
        mediator.emit('server.created', server);

    });
};

ご覧のとおり、サーバーは の後に作成されboot.readyます。これが起動server.createdし、その後、configurer が実行されて起動しますserver.configured

この一連のイベントは mocha でテストする必要があります。

4

2 に答える 2

0

実際、モカはコールバックを非同期的に使用するかどうかを知るために使用するfunction.lengthため、コールバックが実行される順序を知ることはできません。引数が実行されない場合、それらは同期的に実行されます。itfunction(done)function()

編集

メディエーターはEventEmitter2です。つまり、何かを発行すると、ハンドラーは非同期で実行されます。私が言ったように、彼らは実行される順序を知る方法はありません。

問題は、必要なモジュールにあります。各イベントは、おそらく前のハンドラーで発行されるはずです。コードは言葉よりも優れています:

// require('../../src/routines/server/creator')(mediator);
// I guess this module creates the server, then it should emit server.created

// require('../../src/routines/server/configurer')(mediator)
// This one should listen to server.created then configure the server
// and finally emit server.configured
// So in it you should have something like this:

mediator.once('server.created', function(server) {

    // Here you should configure you're server
    // Once it is configured then you emit server.configured

});

また、emitはノード内で即時であるため、emitする前にリスナーを追加することをお勧めします。

これが明確であることを願っています。

于 2012-05-10T18:47:29.280 に答える