javascript (node.js):触发多个事件的单元测试代码

发布于 2024-10-09 09:52:13 字数 563 浏览 3 评论 0原文

我正在尝试编写单元测试代码(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 时间内完成,但是有更好的方法吗?

I am attempting to write unit test code (caolan's nodeunit) that will test for multiple event firings.

So, I am testing

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

So, unit testing only 1 event is easy.

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();
};

Right now, I'm using setTimer() to do a count down and force completion by X amount of time, but is there a better way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

驱逐舰岛风号 2024-10-16 09:52:13

您可以尝试这样的操作:

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() 。

You could try something like this:

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();
});

Basically, I'm keeping track of the events that have fired, and when I find all of them, emit my own, so test.done() can be called on that event.

仅此而已 2024-10-16 09:52:13

一种可能的答案是对每个事件的回调进行编码。

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();
}

嗯...

One possible answer is to encode callbacks for each event.

IE:

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

This works great for single usage instances, I haven't tried multiple ones yet.

callback1

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

urhm...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文