写在开头,本人运维, 之前 java 及 lua 的代码覆盖率工程已经完成,最近正在学习 istanbul, 公司内常用的前端组件是 VUE, 想着把前端的代码覆盖率也实现一下。
我发现 (可能我也是积累不足),vue 覆盖率这块的文档几乎没有。
我在本站学习了大佬的 自动化工具 React Native 代码覆盖率获取探索 (二)
按照文档 部署了 istanbul-middleware 感觉这个挺好用。
我参考大佬的文档,发现自己还是不太理解。
vue init webpack istanbul_middleware_demo
const path = require('path')
const cors = require('cors')
const express = require('express');
const coverage = require('istanbul-middleware');
console.log("DEBUG")
coverage.hookLoader('src', { verbose: true });
const app = express();
const PORT = process.env.PORT || 3000;
app.use(cors());
// console.log(path.resolve(__dirname, 'src'))
// 中间件、路由等
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
app.use('/coverage', coverage.createHandler({ verbose: true, resetOnGet: true }));
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
// 引入axios
import axios from 'axios';
// 封装POST请求
export function postData(url, data) {
return axios.post(url, data, {headers: {'Content-Type': 'application/json'}})
.then(response => {
// 可以在这里处理响应数据,但通常直接返回给调用者
return response.data;
})
.catch(error => {
// 处理错误,可以抛出错误或者返回错误信息
console.error('Error posting data:', error);
throw error;
});
}
然后在 src/components/HelloWorld.vue 下 增加定时请求
import {postData} from '../api.js'
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods: {
sendDataToServer() {
const url = 'http://127.0.0.1:3000/coverage/client';
postData(url, JSON.stringify(window.__coverage__)).then(res => {
console.log(res)
})
}
},
mounted() {
this.intervalId = setInterval(this.sendDataToServer, 10000);
},
beforeDestroy() {
// 清除定时器
clearInterval(this.intervalId);
},
}
node server.js
访问 127.0.0.1:3000 浏览器返回
访问 127.0.0.1:3000/coverage 浏览器返回
请问大佬,应该怎么对 vue 项目进行插桩,实在是不太理解前端这方面,请各位大佬指导,谢谢
demo 已上传 git, istanbul_middleware_demo .