javascript (node.js): код модульного тестирования, который запускает несколько событий - PullRequest
1 голос
/ 27 декабря 2010

Я пытаюсь написать код модульного теста (узел узла caolan), который будет проверять наличие нескольких событий.

Итак, я тестирую

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, но есть ли лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 02 января 2011

Вы можете попробовать что-то вроде этого:

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 () может быть вызван для этого события.

0 голосов
/ 01 января 2011

Один из возможных ответов - закодировать обратные вызовы для каждого события.

IE:

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

Это прекрасно работает для отдельных случаев использования, я еще не пробовал несколько.

callback1

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

urhm ...

...