2016-05-13 15 views
0

Ich habe ein Modul, wo ich eine Vorlage Vorlage laden. Ich würde gerne einen Komponententest dafür schreiben. Ich versuche Mokka, Chai und Rewire zu benutzen.Was ist der beste Weg, Unit-Test in node.js zu schreiben?

Hier ist meine module.js:

var winston = require('winston'); 
var fs = require('fs'); 
var config = require('./config.js'); 
exports.logger = new winston.Logger({ 
    transports: [ 
     new winston.transports.File(config.logger_config.file_transport), 
     new winston.transports.Console(config.logger_config.console_transport) 
    ], 
    exitOnError: false 
}); 
exports.readTemplateFile = function(templateFile, callback) { 
     fs.readFile(config.base_directory + templateFile + '.tpl.xml', 'utf8', function (err, data) { 
      if (err) { 
       logger.error('Could not read template ' + templateFile + ': ' + err); 
      } 
      callback(data); 
     }); 
    }; 

In der Callback-Funktion I Schnurrbart etwas mit der Vorlage zu tun, verwenden. Was ist der beste Weg, dies zu testen?

Vielleicht muss ich die fs.readFile neu verkabeln? Da die Datei nicht vorhanden sein wird, wenn der Test ausgeführt wird. Der Winston-Logger ist auch ein interessanter Teil, denke ich, nicht sicher, ob er initialisiert wird, wenn ich ihn innerhalb eines Mokka- Tests importiere. Mein erster Test zeigt, dass der Logger nicht definiert ist.

Antwort

3

Eines der wichtigsten Prinzipien für das Testen von Einheiten ist das Testen eines sehr kleinen Stücks Code. Um das zu erreichen, sollten Sie auf jeden Fall Aufrufe an Funktionen spotten oder stubben, die nicht zum Testen von Code gehören (in diesem Fall readFile und logger.error). Für bereitgestellten Code können Sie drei Testfälle machen:

  • readfile mit der richtigen Argumente
  • Aufruf Fehler aufrufen, wenn err vorhanden
  • Aufruf Callback-Funktion mit der richtigen Argument ist

Ihr sollte Callback-Funktion sein außerhalb dieses Codes getestet, z durch Bereitstellen gefälschter Daten als Parameter:

define('Some test',() => { 
    it('should return true',() => { 
    expect(callbackFunction('fakeData').to.be.ok); 
    }); 
});