webpack4.0各个击破(9)—— karma篇

简介: webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高。本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法。

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高。本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法。(本篇中的参数配置及使用方式均基于webpack4.0版本

img_d6e7802c9640264835a13b85429f5a6a.png

img_60140e31006b5776c5560aeedc0c6988.png

一. webpack与自动化测试

webpack对应的关键词是模块化,它的主要任务就是打包和管理模块,所以首先需要明确的概念就是webpack之所以关联自动化测试,是因为它能够为测试脚本提供模块管理的能力,本质上来讲,是将webpack的打包功能嵌入了自动化测试框架,而不是将自动化测试框架作为插件集成进了webpack,理解这个区别是非常关键的。

对于Karma+Mocha+Chai及其他自动化测试相关工具的话题将在《大前端的自动化工厂》系列博文中讲述,本篇主要介绍karma-webpack连接件,它从工具实现层面上将自动化测试与自动化构建联系在了一起。

二. karma-webpack

插件地址:https://github.com/webpack-contrib/karma-webpack

2.1 自动化单元测试库简介

先对基本的单元测试工具做一个简要说明:

  • Karma 测试框架,提供多浏览器环境跑单元测试的能力,包括headless浏览器。
  • Mocha 测试框架,提供兼容浏览器和Node环境的单元测试能力,可使用karma-mocha集成进Karma中。
  • Chai 断言库,支持should,expect,assert不同类型的断言测试函数,可使用karma-chai集成进Karma中。

大部分单元测试都是基于上述三个库联合使用而展开的。Karma-webpack主要提供的能力,是为Karma中加载的测试脚本提供模块化加载的能力。

2.2 基本使用

使用yarn add karma-webpack -D进行安装,karma.conf.js配置文件如下:

module.exports = (config) => {
  config.set({

    files: [
      // 针对test目录下所有符合命名规范的测试文件
      { pattern: 'test/*_test.js', watched: false },
      { pattern: 'test/**/*_test.js', watched: false }
    ],

    preprocessors: {
      // 为选定脚本指定前处理器,这里配置所有的测试脚本需要经过webpack处理
      'test/*_test.js': [ 'webpack' ],
      'test/**/*_test.js': [ 'webpack' ]
    },

    webpack: {
      // webpack配置,针对测试脚本打包的compilation配置,与项目文件打包不相关
      // 也可以引入独立的配置文件
    },

    webpackMiddleware: {
      //如果使用了webpack-dev-server则可以传入一些参数
      stats: 'errors-only'
    }
  })
}

这种配置中webpack会将每一个命中的文件当做是一个entry,也就是说它只会处理局部的依赖管理,这样做的优点是可以针对部分测试脚本单独跑单元测试,但劣势也很明显,就是当测试脚本数量很大且需要默认跑所有的测试用例的场景下(例如自动化流水线上自动触发的LLT测试中)效率相对较低。

2.3 默认跑完全部测试用例的场景

针对上面的问题,webpak提供了另一种可选的处理测试脚本集的方法,很容易想象,其实就是自己新建一个entryPoint,将要跑的测试脚本全部引入,打包成一个bundle.js文件,它的优势和劣势和基本场景正好是相反的。

这种场景下,karma.conf.js的配置只需要针对入口文件即可:

files: [
  // only specify one entry point
  // and require all tests in there
  'test/index_test.js'
],

preprocessors: {
  // add webpack as preprocessor
  'test/index_test.js': [ 'webpack' ]
},

然后在测试文件的根目录下新建一个入口脚本index_test.js:

// 这个配置针对的是test/**/?_test.js格式的脚本文件
const testsContext = require.context(".", true, /_test$/);
testsContext.keys().forEach(testsContext)

三. 测试报告

一般跑完单元测试,都需要输出一份指定格式的报告,用于过后自查或问题追溯,此处需要注意的是当与webpack4.0结合使用时,karma的一些默认行为会失效(例如在控制台输出单元测试用例和结果汇总,以及karma独立运行时用来生成代码覆盖率报告插件karma-coverage也无法正常工作),在此均需要重新配置。

  • 单元测试报告

    单元测试信息无法输出的问题,可以显式引用插件karma-spec-reporterkarma-mocha-reporter并进行基本的配置即可。

  • 代码覆盖率报告

    代码覆盖率报告的自动生成配置较为复杂,需要依赖前端代码覆盖率工具istanbul并结合若干插件才能实现。低版本的webpack可以参考karma-webpack-example这个开源项目的示例进行配置。webpack4.0以上版本可以参考下文推荐的示例。

    单元测试结果:

img_e92a4d49b3998b08d341ace75f14eb86.png

覆盖率报告:

img_3b96256581f94054eae8d45a58d63279.png

四. 配置参考

笔者提供了针对webpack4.0 + karma的自动化测试配置示例,放在了Webpack4-Karma-Mocha-Chai-Demo,有需要的小伙伴可以自行查看,如果对你有帮助,不要忘记给个Star哦~

相关文章
|
资源调度 JavaScript 前端开发
CentOS 7.2 下安装配置Node.js和Yarn
centos下node.js的安装配置管理,npm以及yarn包管理工具的安装。
7304 0
|
人工智能 文字识别 算法
垂直领域大模型——文档图像大模型的思考与探索
12月1日,2023中国图象图形学学会青年科学家会议在广州召开。超1400名研究人员齐聚一堂,进行学术交流与研讨,共同探索促进图象图形领域“产学研”交流合作。
878 1
|
弹性计算 资源调度 数据可视化
使用阿里云飞天计划服务器搭建即时通讯平台fiora
使用阿里云飞天计划服务器搭建即时通讯平台fiora
使用阿里云飞天计划服务器搭建即时通讯平台fiora
|
JavaScript 前端开发 测试技术
接口测试平台代码实现106:登录态接口-2
本节我们要想办法构造出登陆态接口的div内的实际dom元素。 大部分内容我们仍然可以借鉴普通接口调试层的内容,所以打开P_apis.html,找到那个登陆态的div,开始进行添加内部控件,但是也不能全都照搬过来,有一些就不需要,比如接口名字。而因为这个接口一个项目基本也就设置一次,所以优化便利性这种事的优先级不高,精力还是留给那些使用频率高的功能上吧~
接口测试平台代码实现106:登录态接口-2
|
1天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1088 0
|
10天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3617 3
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
22天前
|
人工智能 缓存 前端开发
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
DeepSeek Harness + DeepSeek V4 Pro 项目实战保姆级教程!手把手带你从零安装开源 AI 编程工具,开发架构图、知识讲解网站、3D 网页游戏、全栈 AI 应用 4 个项目,覆盖运行模式选择、插件安装与开发,看看能不能对标 Claude。
13353 91
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
|
15天前
|
Web App开发 人工智能 API
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
DeepSeek Harness 精选插件推荐合集,从图片识别、浏览器操控、多 Agent 协作到手机远程控制,一口气带你看完 DSH 社区热门的十几个插件,覆盖技能扩展、UI 界面增强、整活玩法三大类,让你的鲸鱼变得更强。
1876 4