我是单位测试的新手。
我正在对自定义NodeJS包中的每个功能进行单元测试 假设我的包导出函数如下,
//my-package.js
module.exports = {
listFiles,
copyFiles
}
/**
* @return <list> a list of files under src_dir
*/
function listFiles(src_dir){
//stat all files under src_dir and make a list containing all file names
...
}
/**
* @param [allowed_ext] a list of file extensions
*/
function copyFiles(src_dir, dst_dir, allowed_ext = []){
//filter files under src_dir according to allowed_ext
var files = listFiles(src_dir).filter(function(){...})
for(var a_file of files){
//other operations on each single file
...
}
}
我想对listFiles()
和copyFiles()
进行单元测试;但是,copyFiles()
实际上取决于listFiles()
。为这些函数编写单元测试的最佳实践是什么?
答案 0 :(得分:0)
您可以选择几个选项:
我个人建议混合1和2。
现在,关于如何做到这一点 - 如果你是使用Jasmine你可以用间谍创建一个模拟函数:
要模拟require语句,可以使用mock-require:
我总是建议使用像nyc或istanbul这样的覆盖工具:
在我的一些项目中,我强制实施100%覆盖率作为npm test
的一部分,并且它可以很好地确保所有内容都经过广泛测试。
提示:如果其他函数中的每一个都在自己的文件中,那么模拟其他函数使用的函数会更容易,但它不是唯一的方法。