1

Grüße feuert,Javascript (node.js): Unit-Tests Code, der mehrere Ereignisse

Ich versuche, Unit-Test-Code (Caolan des nodeunit) zu schreiben, die für mehrere Event-Zündungen testen.

So teste ich

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-Tests nur 1 Ereignis einfach ist.

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

Gerade jetzt, ich bin mit setTimer() eine Zählung nach unten und Kraft Abschluss von X Höhe der Zeit zu tun, aber es gibt einen besseren Weg, dies zu tun?

-Daniel

Antwort

0

Eine mögliche Antwort ist Rückrufe für jedes Ereignis zu kodieren.

IE:

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

Diese für einmaligen Gebrauch Instanzen funktioniert gut, habe ich noch mehrere diejenigen nicht ausprobiert.

callback1

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

urhm ...

0

Sie so etwas wie dies versuchen könnte:

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

Grundsätzlich bin ich den Überblick über die Ereignisse, die ausgelöst wurden, und wenn Ich finde alle von ihnen, emittieren meine eigenen, so kann test.done() an diesem Ereignis aufgerufen werden.