2017-05-03 3 views

Antwort

1

Schritt 1: Exportieren Sie in den Js-Code, den Sie testen, die Node-Rest-Client-Instanz, damit sie für Ihren Testcode verfügbar ist. Zum Beispiel in myApp.js, habe ich dies:

var Client = require('node-rest-client').Client; 
var restClient = new Client(); 
exports.restClient = restClient; //instance now available outside this module 

restClient.get(someUrl, ...); //actual node rest client call 

Schritt 2: In Ihrem Testcode, erstellen Sie eine Wrapper-Funktion, die eine gefälschte Funktion gibt, und verwenden Sie sinon es in Ihren Zielcode zu verspotten. Auf diese Weise können Sie die Rückgabedaten und den Antwortcode während der Testkonfiguration eingeben.

var nodeRestGet = function (data, statusCode) { 
    return function (url, cb) { 
    cb(data, { statusCode: statusCode || 200 }); 
    } 
}; 

sinon.stub(myApp.restClient, 'get').callsFake(nodeRestGet("", 200)); 

Schritt 3: Schreiben Sie Ihren Testcode. Beachten Sie, dass Sie die Methode wiederherstellen möchten (das Mock entfernen), wenn Sie mehrere Tests ausgeführt werden:

myApp.doThings(); // TEST 

myApp.restClient.get.restore(); // removes the mock 
+0

Dank @JohnW, erhalte ich ** ** cb ist kein Funktionsfehler, können Sie mir bitte helfen darauf. – Praveen

+0

@Praveen, ohne Ihren Code zu sehen, es klingt wie das Problem ist Ihr Zielcode, den Sie testen. Wo ich die obigen Ellipsen in restClient.get (someUrl, ...) setze, müssen Sie eine Callback-Funktion als zweiten Parameter angeben. Wenn Sie Ihren Code teilen, kann ich Ihnen eine definitive Antwort geben. – JohnW

+0

Funktioniert gut mit folgender Änderung. 'var nodeRestGet = function (data, statusCode) { Rücksprungfunktion (url, opts, next) { next (Daten, {statusCode: statusCode || 200}); zurückgeben { on:() => { } }; }; }; ' – Praveen