Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >webpack4.0各个击破(9)—— karma篇

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

作者头像
大史不说话
发布于 2018-09-10 07:49:36
发布于 2018-09-10 07:49:36
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

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

一. 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配置文件如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的配置只需要针对入口文件即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 这个配置针对的是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以上版本可以参考下文推荐的示例。 单元测试结果:

覆盖率报告:

四. 配置参考

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
大多数前端开发者对测试相关的知识是比较缺乏的,一来是开发节奏很快,来不及写,另一方面团队里也配备了“人肉测试机”,完全没必要自己来。但随着项目体量的增大,许多人维护同一份代码,经常会出现有些函数莫名其妙地结果不对了,或者某个接口的入参变了,又或者哪位大哥把后端返回的数据结构给改了。每天工作的时间里被拉来拉去帮人定位问题,结果花了很多时间却发现大部分都是别人的锅。每当遇到项目上线,那就更热闹了,跟着其他“人肉测试机”大家一起点点点......
大史不说话
2018/12/05
1.5K0
大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
Vue的自动化测试
代码集成到主分支需要经过一系列的自动化测试,当测试都通过之后,方可执行自动化部署,否则不能完成集成。这说明了自动化测试的重要性,我们不能等测试工程师去发现问题。
conanma
2021/12/06
2.1K0
详解karma & jasmine自动化测试
前端包管理工具 代码重用和复用是快捷开发的一种重要方式,但是原始的代码模块散布于各个平台上,不好寻找,程序员对其进行有效管理也成为了一大难题。此时,依赖(包、插件、工具都可以称呼,本质是他人写好封装后的代码模块)管理工具应需而生。依赖管理工具使用简单的命令即可提供 依赖的查找、安装、卸载等操作,深受广大程序员喜爱。 前端 Node.js 最为常用的依赖管理工具 是npm,npm 之于Node.js,就如 pip 之于 Python,gem 之于 Ruby,pear 之于 PHP , maven 之于Jav
lonelydawn
2018/02/09
2.6K0
详解karma & jasmine自动化测试
karma与webpack结合
一、必备插件 1.babel:es6的语法支持 2.karma:测试框架 3.jasmine:断言框架 4.webpack:打包工具 5.karma-webpack:karma调用webpack打包接口的插件 二、实现步骤 1.通过npm安装上述必备的插件包 2.创建webpack.test.config.js文件,此文件的配置用于单元测试 var path = require('path'); var webpack = require('webpack'); module.exports={ m
sam dragon
2018/01/17
1.1K0
【xingorg1-ui】基于vue3.0从0-1搭建组件库 (九) 单元测试配置
npm地址 github源码 (九) 单元测试环境配置 karma:进行浏览器UI测试 http://karma-runner.github.io/ 1、依赖安装 # Install Karma && Install plugins that your project needs: $ npm install -D karma karma-chrome-launcher karma-mocha karma-sourcemap-loader karma-spec-reporter karma-
xing.org1^
2020/11/24
1.2K0
【xingorg1-ui】基于vue3.0从0-1搭建组件库 (九) 单元测试配置
Webpack单元测试,e2e测试
此篇文章是续 webpack多入口文件、热更新等体验,主要说明单元测试与e2e测试的基本配置以及相关应用。 一、单元测试 实现单元测试框架的搭建、es6语法的应用、以及测试覆盖率的引入。 1. 需要安装的项目: jasmine:单元测试库 karma:测试框架,配置选择phantomjs浏览器 karma-jasmine:操作jasmine的插件 karma-webpack:webpack与karma的连接 mock:用于数据模拟,用'npm install --save-dev mockjs'安装 kar
sam dragon
2018/01/17
2.5K0
Web自动化之Headless Chrome测试框架集成
IMWeb前端团队
2017/12/29
1.7K0
单元测试初体验
Chai 支持 BDD 风格的 expect/should API 和 TDD 风格的 Assert API。
零式的天空
2022/03/25
1.7K0
尝试造了个工具类库,名为 Diana
项目地址: diana 文档地址: http://muyunyun.cn/diana/ 造轮子的意义 为啥已经有如此多的前端工具类库还要自己造轮子呢?个人认为有以下几个观点吧: 定制性强,能根据自己的需求为主导延伸开发。万一一不小心还能帮到别人(比如 React 库); 纸上得来终觉浅,很多流行的库,只是照着它们的 API 进行使用,其实这些库里蕴含着大量的知识、技巧,最好的办法就是仿照它们来写些小 demo,从而体会这些库的精髓; 造轮子的过程中能让自己体会到与平常业务开发不一样的乐趣;比如和日常业务
牧云云
2018/05/02
9780
前端实用程序包utils - 开发工作流(一)
早年间有幸在Raychee哥门下当小弟,学到两把刷子。在编程路上,他的很多思想深深影响了我,比如笔者今天要分享的主题。在程序开发中,有个utils包,叫做实用程序包,程序员们会把项目中通用的东西抽离出来放到这个里面,这有利于项目工程化的落地,提高项目的可维护性,减少代码冗余,锻炼编码能力,提高编码效率,理解编程思想。
江涛学编程
2021/05/11
1.5K0
前端实用程序包utils - 开发工作流(一)
webpack4.0各个击破(10)—— Integration篇
webpack在工具链中的角色定位是非常清晰的,那么为了与其他流程进行合作,就需要使用任务管理工具来启动webpack,本文介绍两种常见的方法。
大史不说话
2018/09/10
5430
webpack4.0各个击破(10)—— Integration篇
写代码无BUG,网易云前端单元测试方案总结
单元测试的技术方案很多,不同工具之间有互相协同,也存在功能重合,给我们搭配测试方案带来不小的困难,而且随着 ES6, TypeScript 的出现,单元测试又增加了很多其他步骤,完整配置起来往往需要很大的时间成本。我希望通过对这些工具的各自作用的掌握,了解完整的前端测试技术方案。前端单元测试的领域也很多,这里主要讲对于前端组件如何进行单元测试,最后会主要介绍下对于 React 组件的一些测试方法总结。
秋风的笔记
2021/03/12
9.9K0
写代码无BUG,网易云前端单元测试方案总结
webpack4.0各个击破(4)—— Javascript & splitChunk
javascript之所以需要打包合并,是因为模块化开发的存在。开发阶段我们需要将js文件分开写在很多零碎的文件中,方便调试和修改,但如果就这样上线,那首页的http请求数量将直接爆炸。同一个项目,别人2-3个请求就拿到了需要的文件,而你的可能需要20-30个,结果就不用多说了。
大史不说话
2018/09/10
8150
webpack4.0各个击破(4)—— Javascript & splitChunk
webpack4.0各个击破(2)—— CSS篇
以webpack4.0版本为例来演示CSS模块的处理方式,需要用到的插件及功能如下:
大史不说话
2018/09/10
8440
webpack4.0各个击破(2)—— CSS篇
常用的前端自动化测试工具介绍 —— Karma
在开发的过程中,除了代码本身,测试也是重要的一环。大体来说,测试分为以下几种类型:
江一铭
2022/06/17
1.7K0
搭建 karma + jasmine 测试环境
在前端开发的过程中,我们会写很多的功能函数,这样就会涉及到对这些功能函数进行单元测试,而karma就是一个很好用的可以在浏览器环境中进行测试的集成工具。
leocoder
2024/01/29
2930
搭建 karma + jasmine 测试环境
在前端开发的过程中,我们会写很多的功能函数,这样就会涉及到对这些功能函数进行单元测试,而karma就是一个很好用的可以在浏览器环境中进行测试的集成工具。
leocoder
2018/10/31
1.8K0
web自动化测试(1):再谈UI发展史与UI、功能自动化测试
行文前,安利下文章:《图形界面操作系统发展史——计算机界面发展历史回顾》、《再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦》
周陆军
2021/07/25
1.8K0
【多图警告】学会JavaScript测试你就是同行中最亮的仔(妹)
#### ATDD: Acceptance Test Driven Development(验收测试驱动开发)
拾贰
2019/08/28
1.1K0
【多图警告】学会JavaScript测试你就是同行中最亮的仔(妹)
webpack4.0各个击破(3)—— Assets篇
Assets,指项目中被引用的资源,通常为各种格式的图片和字体文件,当然也可能包含各式各样其他扩展名的文件(.json,.xml等),常见的图片和文字资源的处理包括:
大史不说话
2018/09/10
1.3K0
webpack4.0各个击破(3)—— Assets篇
相关推荐
大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验