上篇文章中,对 Karma 进行了简单的介绍,本文是上篇文章的一些延伸,主要是 Karma 和 ES6 相关的配置以及代码覆盖率的配置。

首先来让 Karma 实现 ES6 支持。

ES6 支持

默认情况下,Karma 是不支持 ES6 的,比如我们有这样一个 utils.js 文件:

function add(x){

return(y)=>{

return x + y

}

}

export {

add

}

该文件中使用 ES6 的export 关键字向外暴露了一个 add 函数。然后在 src 文件夹中再创建一个 main.js 文件,并使用 import 关键字导入模块:

import {

add,

} from "./utils.js";

...

在不进行其他配置之前,我们来运行 karma start 命令:

PS E:\charley-praise> karma start

05 11 2017 17:03:10.128:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/

05 11 2017 17:03:10.135:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency

05 11 2017 17:03:10.146:INFO [launcher]: Starting browser PhantomJS

05 11 2017 17:03:13.416:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket gfnyTuv0Hz4bH7JBAAAA with id 98139962

PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR

SyntaxError: Use of reserved word 'import'

at src/main.js:1

PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR

SyntaxError: Unexpected token '>'

at src/utils.js:17

这里就报错了,因为我们使用了浏览器和 Node 都不支持的 ES6 Modules。为了让 Karma 支持 ES6 Modules,我们需要使用 Webpack 和 Babel。下面有请这两位选手:

// 安装 webpack 相关的套件

yarn add webpack karma-webpack -D

// 安装 babel 相关的套件

yarn add babel-core babel-loader babel-preset-env -D

安装完成后,修改 karma.conf.js 配置文件:

1)增加 webpack 配置:

...

webpack:{

module: {

rules: [

{

test: /\.js$/,

use: {

loader: 'babel-loader',

options: {

presets: ['env'],

}

},

exclude: /node_modules/

}]

}

},

...

2)修改配置项中的 preprocessors,应用我们的 webpack 插件:

...

preprocessors: {

'./src/**/*.js':['webpack'],

'./test/**/*.spec.js':['webpack']

},

...

因为我们的原始文件和测试文件都使用了 ES6,因此需要对它们都应用 webpack 的配置。

现在运行 karma start 命令,就不会发生错误了。

代码覆盖率支持

接下来,让 Karma 实现代码覆盖率的支持,让我们隆重请出 Istanbul 大佬:

yarn add istanbul-instrumenter-loader -D

yarn add babel-plugin-istanbul -D

yarn add karma-coverage-istanbul-reporter -D

安装完成后,我们需要做以下配置:

1)修改 karma.conf.js 配置文件中的 webpack 配置项:

...

webpack:{

module: {

rules: [{

test: /\.js$/,

use: {

loader: 'istanbul-instrumenter-loader',

options: { esModules: true }

},

enforce: 'pre',

exclude: /node_modules|\.spec\.js$/,

},

{

test: /\.js$/,

use: {

loader: 'babel-loader',

options: {

presets: ['env'],

plugins: ['istanbul']

}

},

exclude: /node_modules/

}]

}

},

...

2)修改 karma.conf.js 中的 reporters 选项:

...

reporters: ['coverage-istanbul'],

...

3)对覆盖率测试做一些配置

...

coverageIstanbulReporter: {

reports: ['html', 'text-summary'],

dir: 'coverage/',

fixWebpackSourcePaths: true,

skipFilesWithNoCoverage: true,

'report-config': {

html: {

subdir: 'html'

}

}

},

...

现在可以来测试一下单元测试覆盖率的情况了,我们不加入任何单元测试代码,看下运行效果:

05 11 2017 17:04:22.020:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket 6UUDaNimVpEfxhKDAAAA with id 72046933

=============================== Coverage summary ===============================

Statements : 0% ( 0/2 )

Branches : 100% ( 0/0 )

Functions : 0% ( 0/2 )

Lines : 0% ( 0/2 )

================================================================================

对于代码覆盖率的测试,会从语句(Statements)、分支(Branches)、函数(Functions)和行(Lines)四个维度进行。对于这几个维度的解释如下:

行覆盖率(line coverage):是否每一行都执行了?

函数覆盖率(function coverage):是否每个函数都调用了?

分支覆盖率(branch coverage):是否每个if代码块都执行了?

语句覆盖率(statement coverage):是否每个语句都执行了?

接下来,对 utils.js 中的 add 进行单元测试,下面是 utils.spec.js 中的代码:

import { add } from "../src/utils"

describe("测试算数运算",()=>{

it("测试加法运算",()=>{

const add5 = add(5)

expect(add5(5)).toBe(10)

})

})

然后执行 karma start 命令,看下运行效果:

05 11 2017 17:11:09.487:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket WKhEFarUgA8QPn2HAAAA with id 38737854

=============================== Coverage summary ===============================

Statements : 100% ( 2/2 )

Branches : 100% ( 0/0 )

Functions : 100% ( 2/2 )

Lines : 100% ( 2/2 )

================================================================================

恩,不错,现在我们的代码覆盖率为 100%,看来升值加薪,是在所难免了。

查看 HTML 报表

除了可以在命令行的运行结果中查看代码覆盖率的情况,Karma 还为我们生成了 HTML 报表(上面在配置 coverageIstanbulReporter 对生成路径进行了配置),看起来更加直观。您可以自行打开 coverage (或其他您自行配置的路径)进行查看,这里就不截图了。

总结

本文主要在前文的基础上,为 Karma 增加了 ES6 和代码覆盖率的支持,让 Karma 支持 ES6 需要用到 Webpack 和 Babel 的一些套件, 对于代码覆盖率的支持,我选用了 Istanbul 的系列套件。

关于具体的代码,我在下篇文章中专门进行陈列。

完。

karma测试html,常用的前端自动化测试工具介绍 —— Karma(二)相关推荐

  1. 常用的前端自动化测试工具介绍 —— Karma

    在开发的过程中,除了代码本身,测试也是重要的一环.大体来说,测试分为以下几种类型: 单元测试 功能测试 性能测试 安全测试 对于普通开发者而言,单元测试和功能测试是最常见的两种测试方式,本系列文章要介 ...

  2. 前端自动化测试工具:SlimerJS、phantomJS 和 CasperJS

    对于富客户端的 Web 应用页面,自动登录.页面修改.抓取页面内容.屏幕截图.页面功能测试-面对这些需求,使用后端语言需要花费不少的精力才能实现.此时 SlimerJS.phantomJS 或 Cas ...

  3. 4.前端开发工具介绍以及下载使用

    支持戳这里看视频学习 →→→ [上]前端开发工具介绍与下载...[下]写人生中第一个HTML 戳这里可看全系列内容 →→→ 戳我戳我戳我 文章目录 一.前言 二.编辑器介绍 1.VSCode a.介绍 ...

  4. python自动测试p-python网络爬虫之自动化测试工具selenium[二]

    @ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...

  5. autorunner测试java代码,AutoRunner自动化测试工具介绍

    AutoRunner简介 AutoRunner是黑盒测试工具,可以用来完成功能测试.回归测试.每日构建测试与自动回归测试等工作.是具有脚本语言的.提供针对脚本完善的跟踪和调试功能的.支持IE测试和Wi ...

  6. android 打开系统相册_这5款常用Android手机自动化测试工具你要收藏

    1.Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出.实际上该工 ...

  7. 常用的WEB自动化测试工具

    主流自动化测试工具–QTP QTP是一个侧重于功能的回归自动化测试工具;提供了很多插件. QTP支持的脚本语言是VBScript,这对于测试人员来说,感觉要"舒服"得多.VBScr ...

  8. 【1个月快速学习自动化测试】接口自动化测试(4) —— 接口自动化测试工具介绍

    接口测试的全称是应用程序编程接口(API)测试,从原理上来说,接口测试是模拟客户端向服务器端发送请求,然后检查能否获得正确的返回信息.接口测试用于测试RESTful API.SOAP Web服务,这些 ...

  9. 前端build工具介绍

    即使对于一些经验丰富的开发者来说,诸多的前端工具还是会让他们感到头痛.解决这个问题的最好办法,就是在概念上理解他们的工作方式,已经他们之间相互配合的方式. 不要被各种专业名词唬住 Node, NPM, ...

最新文章

  1. java性能保障技术_狙击P7!阿里大佬亲授“Java性能调优技术宝典”,太完整了!...
  2. java内存规范_Java内存模型-jsr133规范介绍
  3. 图解classloader加载class的流程及自定义ClassLoader
  4. adonis.js mysql_Adonis.js——数据库基本操作
  5. mmap和munmap对文件进行操作(读写等)
  6. java计算集合对称差
  7. 用得最多的altium版本_83版《神雕》有多猛?收视率破90%!金庸最满意的版本...
  8. 新年寄语 | 2018 以及 Oracle 18c 一个时代的开启
  9. python写一个表白程序_用Python个女神做一个表白神器
  10. 《深入理解Java虚拟机》第6章 类文件结构
  11. GoCart 分类和产品 测试二
  12. 计算机体系结构在线读,计算机体系结构new.ppt
  13. 【AAAI 2020】微软亚洲研究院6篇精选论文在家必看!
  14. HDOJ 2015 偶数求和
  15. 前端神器-网站图片抓取精灵V1.0正式发布
  16. ,PLCSIM、SIMIT、Amesim、NX MCD、 Process Simulate、Plant Simulation,一文带你了解西门子整个虚拟调试与仿真软硬件体系
  17. Android 编写测试用例
  18. mysql简述cs结构与bs结构的区别_什么是BS和CS结构?
  19. amr java 播放_Java ME中.amr文件的语音或音频播放器
  20. 超级好用的 excel 导入导出框架:excel-import-export

热门文章

  1. 我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
  2. weka mysql 汉字_Weka访问MySQL数据库
  3. Spark RDD 论文详解(二)RDDs
  4. 格局是什么意思「简单易懂」
  5. FFmpeg —— 编译obs源码(解决编译后不能捕获摄像头问题)
  6. python如何比较大小_python列表如何比较大小
  7. 三、应广单片机 I/O 设定
  8. this kernel requires an x86-64 CPU, but only detected an i686 CPU. unable to boot - please ues a ke
  9. ARM简介及Cortex-A9
  10. 提前还贷 别忘退税退保