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

一个可能的答案是为每个事件编码回调。

IE:

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

这对于单个使用实例非常有用,我还没有尝试过多个实例。

回调1

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

嗯……

于 2010-12-31T22:59:05.733 回答