如何统计Typescript 的集成测试覆盖率

统计Typescript 的集成测试覆盖率(非单元测试的),例如使用python去跑自动化统计覆盖率
看了很多相关javascript的方案,
例如

https://testerhome.com/topics/8919

目前项目是纯服务端的,全部使用typescript写的,无界面,想在服务启动前 或者 运行时插桩,后运行python自动化脚本,然后获取代码覆盖率

看了一下目前方案是:

  • 【server】代码添加 hook:使用 middleware ,在项目入口 js 添加 middleware 的 handler ,给所有 require 函数添加钩子,在 require 时自动进行插桩。middleware 的示例项目里面用的就是这种方法。主要适用于集成测试。

但这钩子函数可能要对程序本身代码进行改造,不熟悉相关语言有点麻烦。

查看了 istanbuljs工具,也仅限于同语言的单元测试覆盖率。
希望有更有效的方案。类似于jacoco的on-the-fly模式
用于统计自动化测试覆盖率,还有后续增量等相关覆盖率。

这个问题有点超纲了,我就简单回答下吧。

各种插桩的本质是在什么时间什么地点修改对应的代码。什么时间分编译前后运行前后,什么地点分源代码字节码运行时。

fly模式是借助运行时提供的篡改机制实现的。js本身没有字节码,所以大部分工具会通过babel等工具在编译前对代码进行修改。就算是代码层插桩,仍然是可以实现集成测试的覆盖率分析的。你可以在istanbuljs上做些改进。

要想实现纯fly模式,需要运行时提供干预能力,js运行时被封装到了浏览器里,所以深拔浏览器的debug trace hook能力就可以做到。至少devtools协议就可以实现。但是目前没成熟方案,只能你自己填坑了。

查了一下资料, Istanbul v1 目前是支持typescript语言的,所以理论上是否你可以用上面testerhome那篇帖子的方法使用Istanbul v1工具实现插桩呢?我感觉理论上可以,但是要你自己去试试看咯,这种要自己填坑咯。