1

Привет,Javascript (Node.js): блок кода тестирования, запускает несколько событий

Я пытаюсь написать блок кода тест (nodeunit 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(), чтобы сделать обратный отсчет и завершение силы на Й количество времени, но есть лучший способ сделать это?

-daniel

ответ

0

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

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 ...

0

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

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

Смежные вопросы