我正在尝试编写单元测试代码(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 时间内完成,但是有更好的方法吗?
最佳答案
你可以尝试这样的事情:
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()。
关于JavaScript (node.js) : unit testing code that fires multiple events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535951/