【问题标题】:javascript (node.js): unit testing code that fires multiple eventsjavascript (node.js):触发多个事件的单元测试代码
【发布时间】:2011-05-30 23:22:38
【问题描述】:

我正在尝试编写将测试多个事件触发的单元测试代码(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 时间,但有更好的方法吗?

【问题讨论】:

    标签: javascript unit-testing events node.js event-driven-design


    【解决方案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()。

    【讨论】:

      【解决方案2】:

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

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

      嗯……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 2023-03-22
        • 2010-12-26
        • 1970-01-01
        相关资源
        最近更新 更多