我有一个模块,我加载胡子模板文件。我想为此写一个单元测试。我正在尝试使用mocha,chai和rewire。
这是我的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);
});
};
在回调函数中,我使用小胡子对模板做一些事情。 测试这个的最佳方法是什么?
也许我必须重新连接fs.readFile?当测试执行时,文件将不存在。 Winston记录器也是一个有趣的部分我猜,如果我在mocha测试中导入它,不确定它是否会被初始化。我的第一个测试显示记录器未定义。
答案 0 :(得分:3)
最重要的单元测试原则之一是测试非常小的代码。要实现这一点,你绝对应该模拟或存根调用不属于测试代码的函数(在本例中为readFile和logger.error)。对于提供的代码,您可以创建三个测试用例:
您的回调函数应在此代码之外进行测试,例如通过提供假数据作为参数:
define('Some test', () => {
it('should return true', () => {
expect(callbackFunction('fakeData').to.be.ok);
});
});