热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React前端功能测试覆盖率统计

1.React工程插桩教程对于前端的覆盖率统计,单元测试的可以i通过jest和Enzyme配合进行单元测试并统计覆盖率,但是现在说的覆盖率主要是指功能测试的覆盖率。而对于功能测试的

react

1.React工程插桩教程
对于前端的覆盖率统计,单元测试的可以i通过jest和Enzyme配合进行单元测试并统计覆盖率,但是现在说的覆盖率主要是指功能测试的覆盖率。
而对于功能测试的测试覆盖率,肯定是需要进行代码插桩然后统计代码执行的密度,进行覆盖率统计,而插桩的库主流的就是istanbul
一,对于node项目
可以使用istanbul-middleware来进行插桩以及覆盖率统计,可以参考样例https://github.com/chenhengjie123/middleware-browser-coverage-demo
在依赖中添加istanbul-middleware和nopt,
然后使用istanbulMiddleware.hookLoader(__dirname , {verbose:true})来注入钩子返回插桩代码
app.use('/coverage', coverage.createHandler({ verbose: true, resetOnGet: true }));
app.use(coverage.createClientHandler(publicDir, { matcher: matcher }));
暴露/coverage来获取覆盖率,然后可以通过远程请求获取覆盖率或这定时i上报采集分析覆盖率,覆盖率信息保存至全局变量window.__coverage__中

二,对于React项目
因为React是属于客户端,react的代码,都会通过webpack打包编译成纯的js文件然后放到服务端当作静态文件执行,我们本地的环境实际
是通过React和node模拟了一个服务端,那么如果要进行覆盖率统计需要对react组件进行插桩然后编译成js执行。
插桩有两种方式,一种是nyc(istanbul的命令行接口),还有一种是使用babel插件
1.使用nyc方式,nyc instrument [input] [output]
nyc instrument src ..\monitortool\jddl-app-client-back\src
如果插桩失败的可以使用npm install -g [email protected],这个问题i实际是高版本的nyc做出了一些限制,修改下配置也是可以的
新建一个工程作为采集服务:wind-common-middleware(采集服务)
将需要插桩的代码考到该工程中
 cp -r wind-common/src wind-common-middleware
 然后进入该工程
 cd wind-common-middleware
 进行插桩
 nyc instrument src ../wind-common/src
 启动wind-common
 启动wind-common-middleware
 
 问题:这种方式插桩后的代码编译失败,主要的问题有:
 ①.引用问题,引用必须在第一行,插桩后的引用不在第一行
 ②.引用代码被修改 
 import {Layout,Menu} from 'antd';被改成了import{Layout,Menu}from'antd';导致引用失效
 ③.某些代码查妆后不能执行
 const{SubMenu}=Menu;   ======>    const{SubMenu}=(cov_28x5j2q2at.s[0]++,Menu);
 2.使用插件方式

因为上面第一种方式的问题,那么我们可不可以插桩后再通过babel编译运行呢,

结果是不行的,代码似乎没有问题,没有了import也没有其他的语法问题,但是依然还是过不了react这一关,还是会报错,依然是之前的那些问题,那么这样只有一条路可以走了,是用babel编译后的代码进行插桩,使用插件babel-plugin-istanbul

 首先项目的目录结构如下

引入依赖:

    "@babel/cli": "7.7.7",

    "babel-loader": "8.1.0",

    "babel-plugin-istanbul": "6.0.0",

    "@babel/preset-react": "7.8.0"

babel-cli是babel编译的主要依赖

babel-loader是文件处理器,在webpack的配置文件中需要配置react组件使用此loader来进行传输处理

babel-plugin-istanbul是插桩的主要依赖

babel-preset-react是react使用babel必须的依赖

新建.babelrc文件,内容

{

    "presets": ["@babel/react"],

    "plugins": ["istanbul"]

  }

webpack.config.js文件如下

const path = require('path');

module.exports = {

  mode: 'development',

  entry: './src/index.js',

  module: {

    rules: [

      {

        test: /\.(js|jsx)$/,

        exclude: /node_modules/,

        use: [{

          loader: 'babel-loader'

        }]

      }

    ]

  }

};

package.json中的脚本文件如下

"scripts": {

    "start": "react-app-rewired start",

    "build": "react-app-rewired build",

    "test": "react-app-rewired test"

  },

启动成功后,可以看到能够获取到window.__coverage__

看source可以看到是查妆后的代码:

完成


 
 


推荐阅读
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 本文探讨了Node.js后端开发的基础知识,包括模块源码的使用方法、前后端源码的区别以及如何在命令行环境中编译Node.js源代码。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 在Linux系统中,许多应用程序以源代码的形式提供,这给安装带来了挑战。本文旨在介绍一种简化源码软件安装流程的方法,帮助用户更加轻松地完成安装。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • NPM 脚本 'start' 退出,未显示 create-react-app 服务器正在监听请求
    遇到 NPM 脚本 'start' 退出且未显示 create-react-app 服务器正在监听请求的问题,请求帮助。 ... [详细]
author-avatar
噬血--男爵_380_203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有