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

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

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以上版本可以参考下文推荐的示例。

    单元测试结果:

    覆盖率报告:

四. 配置参考

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

原文地址:http://blog.51cto.com/13869008/2167625

时间: 2024-10-10 16:22:27

webpack4.0各个击破(9)—— karma篇的相关文章

webpack4.0各个击破(5)—— Module篇

webpack4.0各个击破(5)-- Module篇 webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法.(本篇中的参数配置及使用方式均基于webpack4.0版本) 使用webpack对脚本进行合并是非常方便的,因为webpack实现了对各种不同模块规范的兼容处理,对前端开发者来说,理解这种实现方式比学习如何配置w

webpack4.0各个击破(4)—— Javascript & splitChunk

目录 一. Js模块化开发 二. Js文件的一般打包需求 三. 使用webpack处理js文件 3.1 使用babel转换ES6+语法 3.2 脚本合并 3.3 公共模块识别 3.4 代码分割 3.5 代码混淆压缩 四. 细说splitChunks技术 4.1 参数说明 4.2 参数配置 4.3 代码分割实例 五. 参考及附件说明 webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建

webpack4.0各个击破(10)—— Integration篇

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法.(本篇中的参数配置及使用方式均基于webpack4.0版本) 一. Integration 下文摘自webpack中文网: 首先我们要消除一个常见的误解,webpack是一个模块打包工具(module bundler),它不是一个任务执行工具,任务执行器是用来自动化处

webpack4.0各个击破(2)—— CSS篇

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法.(本篇中的参数配置及使用方式均基于webpack4.0版本) 一. CSS文件基本处理需求 假设项目中的CSS文件均采用预编译语言编写,那么在打包中需要处理的基本问题包括: 预编译语言转换 样式文件挂载方式选择 代码优化(合并及压缩) 去除或保留指定格式的注释 资源定

前端最火工具webpack4.0中级教程

<webpack4.0各个击破系列>适合不满足于只会配置webpack但一时间又看不懂源码的中级读者.我没法保证这个系列是最好的,但至少能保证每一篇博文都跟那些Ctrl+C和Ctrl+V的博文有本质的区别,不信你读读看. 一.webpack是什么 中文版官方网址:www.webpackjs.com webpack是前端最火的打包工具,是大前端自动化工厂的重要组成部分.上面的LOGO已经非常形象地表达了webpack所做的最主要的事情--打包,尽管它为非常多的工具提供了适配接口,但官网仍然推荐将

webpack4.0以上太难了....

我刚入门webpack就被版本问题坑一脸,以此第一篇博客记录一下我踩过的坑~~~ 1.报错:Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema. - configuration has an unknown property 'mode'. These properties are valid: 解决:W

手把手带你掌握新版Webpack4.0

课程介绍:Webpack 目前无论在求职还是工作中,使用越来越普及.而想要学懂,学会Webpack更绝非易事.本课程完整讲清最新版本下的 Webpack 4 知识体系,通过 基础 + 实例 + 原理代码编写 + 复杂案例分析 完成Webpack4的分析与讲解.更重要的是让你对整个前端项目的构建有一个全局化的认识,实现能力思想双升级. 课程目录:第1章 课程导学(打消你的学习疑虑)掌握Webpack越来越成为前端工程师的标配技能,本章会对课程整体进行介绍,打消你的学习疑虑.1-1 课程导学 第2章

第0讲: 准备篇

本篇是软件测试自学课程的第0讲,主要介绍一下你在本专栏可以学到什么,学习前需要准备什么. 本专栏主要会分成三部分来介绍软件测试的必备知识: 1.软件测试的基础知识,这部分主要包括软件测试的基础理论.Bug相关的理论和测试用例设计技术三部分,通过本部分的学习可以掌握从事软件测试工作必备的知识. 2.功能自动化测试技术,本篇主要讲解使用RobotFramework+Selenium进行自动化验收测试所需的知识. 3.性能测试,本部分主要讲解性能测试一些基本理论和LoadRunner工具的使用. 在学

Nukkit插件从0开始:目录篇

系列作者:粉鞋大妈 文章出处:http://www.cnblogs.com/xtypr 欢迎转载.翻译,也请保留这段声明,不胜感激. Nukkit是一款用Java制作的Minecraft PE服务端软件,是由MagicDroidX在github上发起的开源项目,遵守GPL开源协议.Nukkit模仿了PocketMine的结构,后者是一款用PHP制作的开源Minecraft PE服务端软件,使得开发者能更快的适应开发环境.由于使用了Java作为开发语言,大大提升了性能和兼容性,是其它同类软件无法比