1

複数のイベントの発生をテストする単体テスト コード (caolan の nodeunit) を作成しようとしています。

だから、私はテストしています

function A() {
  this.fireaway = function() {
    send_message_A_to_queue();
    send_message_B_to_a_different_queue();
    send_message_C_to_a_web_service();
  };
}

したがって、1 つのイベントのみの単体テストは簡単です。

exports.A = function(test) {
  a = new A();

  queue = new Queue();
  queue.on('message', function(err, message) {
     test.ok(true, "got message");
     test.done();
  };

  a.fireaway();
};

現在、setTimer()カウントダウンを使用して X 時間までに強制的に完了させていますが、これを行うより良い方法はありますか?

4

2 に答える 2

1

次のようなことを試すことができます:

var status = {
    'message1': false,
    'message2': false,
    'message3': false,
    'message4': false
};
var my_test_queue = new Queue();
function caught_one(arg)
{
    status.arg = true;
    // if status.message1, message2, message3 and message4 == true,
    my_test_queue.emit('done');
}

queue1.on('message1', function(err, message) {
    test.ok(something);
    caught_one('message1');
};

queue2.on('message2', function(err, message) {
    test.ok(something);
    caught_one('message2');
};

queue3.on('message3', function(err, message) {
    test.ok(something);
    caught_one('message3');
};

queue4.on('message4', function(err, message) {
    test.ok(something);
    caught_one('message4');
};

my_test_queue.on('done', function() {
    test.done();
});

基本的に、私は発生したイベントを追跡しており、それらがすべて見つかったら、独自のイベントを発行するので、そのイベントで test.done() を呼び出すことができます。

于 2011-01-02T18:42:37.123 に答える
0

考えられる答えの 1 つは、各イベントのコールバックをエンコードすることです。

いいえ:

send_message_A_to_queue(callback1);
send_message_B_to_a_different_queue(callback2);
send_message_C_to_a_web_service(callback3);

これは 1 回の使用に適していますが、複数のインスタンスはまだ試していません。

コールバック1

function(response) { 
    test.equals('ok', response.obj);
    test.done();
}

うーん...

于 2010-12-31T22:59:05.733 に答える