欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何实现 JavaScript 工程代码覆盖率统计

程序员文章站 2022-06-26 17:19:12
实现原理基于 AST 技术我们将前端项目的中的代码打桩(插入统计代码)实现示例例如 app.js 的代码如下let App = function(){this.name_ = 'i am app';};App.prototype.sayHi = function(){alert(this.name_ + ',nice to meet you');};进行打桩统计的代码window.logLine = function(fileName,fileLine){...

实现原理

基于 AST 技术我们将前端项目的中的代码打桩(插入统计代码)

实现示例

例如 app.js 的代码如下

let App = function(){
	this.name_ = 'i am app';
};
App.prototype.sayHi = function(){
	alert(this.name_ + ',nice to meet you');
};

进行打桩统计的代码

window.logLine = function(fileName,fileLine){
   //记录已执行的文件以及具体代码行
 	 window.executeLogCodeMap = window.executeLogCodeMap || {};
   
   //对应文件
	 window.executeLogCodeMap[fileName] = window.executeLogCodeMap[fileName] || {};
	 
	 //对应行
   window.executeLogCodeMap[fileName].push(fileLine)
}

app.js 经过打桩后

let App = function(){ logLine('app.js',1);
	this.name_ = 'i am app';logLine('app.js',2);
};logLine('app.js',3);
App.prototype.sayHi = function(){ logLine('app.js',4);
	alert(this.name_ + ',nice to meet you');logLine('app.js',5);
};logLine('app.js',6);

最后通过在网页运行脚本后, executeLogCodeMap 就是一个具体的日志文件

logLine('app.js',5); 完成这样的一次次执行收集

市面上的代码覆盖率原理大致如此,不过为了大规模在项目中使用,实际 logLIne 这样的代码会进行压缩设计,达到最佳的性能设计。

本文地址:https://blog.csdn.net/terrychinaz/article/details/112505580