2016-05-04 8 views
0

server.jsSinon Mocha Knoten Fehlerbehandlung

var server = http.createServer(function(req, res) { 

    lib.doSomething(x, y, function(err, data) { 
     if (err) throw(err); 

     res.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     res.end(data); 
    }); 
}); 

serverTest.js

var request = require('request'); 
var server = require('server'); 

    it('throws error when doSomething returns err', function(done){ 

     var expected = 'testError'; 

     doSomething = sinon.stub(lib, 'doSomething', function(x, y, callback){ 
     callback(new Error(expected)); 
     }); 

     try{ 
     request(url, function(err, response, body){ 
      done(); 
     }); 
     } catch(e){ 
     expect(e).to.equal(expected); 
     }; 

    }); 

näherte ich dieses Gerät zu testen viele Möglichkeiten, aber wenn ich die Tests laufen, halte ich eine Uncaught Error: testError und den Test bekommen schlägt fehl. Ich schaute mich online um und fand kein Glück. Was wäre der beste Ansatz, um dieses Gerät mit den erwarteten Fehlern testen zu lassen?

+0

Woher kommt Ihre Referenz zu 'lib' aus serverTest.js? – idbehold

+0

Entschuldigung, es sollte eine Var sein lib = require ('lib') – James

Antwort

0

Was Sie hier haben, ist ein Prozess, der über einen Sockel mit sich selbst spricht. server.js richtet einen Dienst ein, der Anforderungen auf einem Socket überwacht und antwortet, und dann stellt Ihr Testcode eine Verbindung zu diesem Socket her und stellt Anforderungen. Nun ist die Sache, dass der Call-Stack für die Server-Seite und der Call-Stack für die Client-Seite völlig unterschiedliche Stapel sind. Wenn der Server eine Ausnahme auslöst, kann Ihr Client sie nicht abfangen. Mit anderen Worten, Ihr Anruf request wird keine Ausnahme auslösen, weil der Rückruf lib.doSomething tut. Sie könnten trivialerweise prüfen, ob der Callback eine Ausnahme ausgelöst hat, aber dann testet das nicht viel.

+0

Ich dachte über das Testen der Rückruf, aber Sie haben Recht, es würde überhaupt nichts testen. Wie würde ich den Server und/oder den Test besser gestalten? – James