【发布时间】:2015-08-29 02:40:27
【问题描述】:
我是测试驱动开发的新手,正在尝试为我的应用程序开发自动化测试套件。
我已经成功编写了测试来验证从成功调用 Node 的 fs.readFile 方法收到的数据,但是正如您将在下面的屏幕截图中看到的那样,当我使用 istanbul 模块测试我的覆盖范围时,它正确显示我没有测试了从 fs.readFile 返回错误的情况。
我该怎么做?我有一种预感,我必须模拟一个文件系统,我曾尝试使用 mock-fs 模块,但没有成功。文件的路径在函数中是硬编码的,我正在使用 rewire 从我的应用程序代码中调用未导出的函数。因此,当我使用 rewire 的 getter 方法访问 getAppStatus 函数时,它使用真正的 fs 模块,因为它是在 getAppStatus 所在的 async.js 文件中使用的。
这是我正在测试的代码:
// check whether the application is turned on
function getAppStatus(cb){
fs.readFile(directory + '../config/status.js','utf8', function(err, data){
if(err){
cb(err);
}
else{
status = data;
cb(null, status);
}
});
}
这是我为返回数据的情况编写的测试:
it('application should either be on or off', function(done) {
getAppStatus(function(err, data){
data.should.eq('on' || 'off')
done();
})
});
我使用 Chai 作为断言库并使用 Mocha 运行测试。
非常感谢任何帮助我模拟从 fs.readFile 返回的错误,以便我可以为此场景编写测试用例。
【问题讨论】:
标签: node.js unit-testing mocha.js fs chai