背景:
前端测试在过去的半年中上线质量较低,测试不清楚开发设计范围,只进行黑盒测试会发生漏测,排查问题缓慢等情况。而在服务端实践的过程中,测试覆盖度能有效的发现代码逻辑分支不合理的地方以及更好的覆盖各种场景。后端用的java公司ci平台有成熟的测试覆盖度统计平台。对于nodejs 项目并不支持,故而需要自行调研设计nodejs 项目的工具。
工具名称:
Istanbul
项目地址:
https://github.com/istanbuljs/nyc
部署方式:
在待测项目目录下
npm i -D nyc
使用说明:
1、在项目的package.json 脚本中添加如下命令:
"scripts": {
"test":"mocha --recursive",
"cov":"export NODE_DEBUG=dev,info,error && nyc --reporter=lcov node 'index.js' "
},
命令说明: 要收集覆盖度信息只需要在正常启动项目的命令前加nyc即可,后面紧跟的reporter=lcov表示生成html格式报告,其他相关命令可以用npx nyc –help查看。
2、由于测试覆盖度需项目结束时才会生成,故需要在项目启动index.js添加可以结束当前进程的条件:
if (!module.parent) app.listen(config.server.port);
process.stdin.resume();
process.stdout.write('输入任意值关闭程序');
process.stdin.on('data',function(chunk){
console.log('输入任意值关闭程序');
process.exit()});
3、在项目启动目录下输入:
npm run cov
启动项目,执行测试用例。
执行完成后,在控制台输入任意字符即可关闭程序得到覆盖度报告。
覆盖度报告在coverage/目录下
4、查看报告:
进入./coverage/lcov-report/ 目录下
Python2.7可以通过
python -m SimpleHTTPServer 7894
开启临时服务器,在本地浏览器中输入
host:7894 即可查看报告,效果如下:
点进去即可查看详细执行情况如图,红色部分即为未走到的逻辑分支:
其他说明:Istanbul支持karma mocha等各种主流测试框架,用其他测试框架时,只需将package.json中的node index.js 换成相应测试框架的启动命令即可。