2015-10-22 8 views
6

Ich arbeite an einem Projekt, das Knoten verwendet und wir versuchen, eine 100% ige Abdeckung unserer Funktionen zu erreichen. Dies ist die einzige Funktion, die wir nicht getestet haben, und sie befindet sich in einer anderen Funktion.Wie Knoten Knotendaten Funktion testen

var userInput = ""; 
    req.on("data", function(data){ 
     userInput += data; 
    }); 

Wie gehen Sie beim Testen dieser Funktion vor? Wir haben versucht, die Funktion aus einer anderen Datei zu exportieren, aber kein Glück.

Ich sollte erwähnen, dass wir Band als Testmodul verwenden.

Antwort

0

Sie müssen dieses "Daten" -Ereignis auf Anforderung auslösen. Damit wird dieser Rückruf aufgerufen.

Zum Beispiel nehmen wir an, Sie req auf Ihrem Test haben, könnten Sie so etwas tun (das ist Mocha):

req.trigger('data', 'sampleData'); 
expect(userInput).to.equal('sampleData'); 
+0

zu sein, die ich erwähnt habe, dass ich sollte Band bin mit zu testen. Glauben Sie, dass es auf ähnliche Weise funktionieren wird? –

+0

Ja ich denke es würde. Können Sie bitte Folgendes testen: '' 'req.emit ('data', 'sampleData'); console.log (userInput); '' 'und sehen Sie, ob 'sampleData' gedruckt wird - andernfalls versuchen Sie den Vorschlag von @eljefedelrodeodeljefe –

0

req.emit('data', {sampleData: 'wrongOrRightSampleDataHere'}) sollte es tun. Wenn Sie das Objekt http oder damit das req Objekt instanziieren, stellen Sie sicher, dass Sie ein neues Objekt instanziieren, dass kein anderer Test dieses Ereignis empfängt.

Um vollständigere ...

var assert = require('assert') 
function test() { 
    var hasBeenCalledAtLeastOnce = false 
    var userInput = ""; 
    // req must be defined somewhere though 
    req.on("data", function(data){ 
     userInput += data; 

     if(hasBeenCalledAtLeastOnce) { 
      assert.equal(userInput, "HelloWorld", "userInput is in fact 'HelloWorld'") 
     } 
     hasBeenCalledAtLeastOnce = true 
    }); 

    req.emit('data', "Hello") 
    req.emit('data', "World") 

} 

test()