在实际项目的自动化测试过程中,如果只有这两个方法,很显然,是远远不够的,这时候,就需要我们对之前的方法进行扩充,同时还有很多自动化的机制需要集成进去。这时候 Jest 闪亮登场!

Jest 框架介绍

一个优秀的自动化测试框架,在以下三个方面应该比较突出:

  • 性能好
  • 功能齐全
  • 易用性很好

Jest 在这三个方面做的非常好(当然了,像Jasmine、mocha这些主流前端测试框架做的也不错)。

这些主流前端测试框架使用的方法、原理上都差不多,实际上,我们学会了一个,另外几个也就很容易的继续学习了,所以这篇文章只讲解 Jest。

那么 Jest 具体好用在哪些方面呢?

答案是这些:

  • 速度快(可以自动监测修改过的代码,不会重复测试)
  • API 简单、数量少
  • 易配置
  • 隔离性好
  • 监控模式
  • IDE 整合(比如vs code)
  • Snapshot(快照测试)
  • 多项目并行
  • 覆盖率
  • Mock 丰富
  • 对新技术支持度好

使用Jest修改自动化测试样例

在上面的部分,我们自己写了一些测试代码对 Math 库进行了测试,现在我们要使用 Jest 对 Math 进行重新测试。

首先打开编辑器,进入到控制台(为了避免不必要的麻烦,建议大家跟我一样使用vs code)。

第1步:初始化npm环境

npm init

在执行命令的时候会遇到一些选项或者问题,无脑按回车即可,如果看到目录下出现了一个 package.json 文件,那么这就是一个标准的 npm 包了。

第2步:安装依赖

npm install jest -D

注:-D 是 --save -dev 的缩写。

如果看到 Jest 出现在了 package.json 文件中,并且目录中出现了 node_modules 文件夹,就说明安装成功了。

第3步:修改之前的代码

首先删除之前写的 test 方法 和 expect 方法 的实现过程,因为 Jest 自带了这两个方法,我们不需要手动实现。然后采用模块化的标准,将 math.js 中的方法导出:

// math.js

function add(a, b) {
  return a + b;
}

function minus(a, b) {
  return a - b;
}

function multi(a, b) {
  return a * b;
}

module.exports = { add, minus, multi };

然后在 math.test.js 文件中引入这几个方法:

// math.test.js

const { add, minus, multi } = require("./math");

test("测试加法 3 + 3", () => {
  expect(add(3, 3)).toBe(6);
});

test("测试减法 3 - 3", () => {
  expect(minus(3, 3)).toBe(0);
});

test("测试乘法 3 * 3", () => {
  expect(multi(3, 3)).toBe(9);
});

第4步:配置 package.json 文件

将如下代码添加到 package.json 中:

"scripts": {
  "test": "jest"
},

第5步:执行测试代码

完成配置之后,运行 yarn test 或者 npm run test ,控制台将输出如下信息:

jest单元测试结果分析 jest原理_程序人生

假设这个时候,我们把第三个测试用例的结果改成错误值:

// math.test.js

const { add, minus, multi } = require("./math");

test("测试加法 3 + 3", () => {
  expect(add(3, 3)).toBe(6);
});

test("测试减法 3 - 3", () => {
  expect(minus(3, 3)).toBe(0);
});

test("测试乘法 3 * 3", () => {
  expect(multi(3, 3)).toBe(10); // 错误的结果
});

重新运行 yarn test 或者 npm run test,可以看到如下结果:

jest单元测试结果分析 jest原理_前端框架_02

可以看到,控制台报出了错误:乘法测试没有通过,期待值(Expected)是10,但是返回值是(Received)9。

然后我们再把测试结果改成正确的值,重新执行命令行,就能得到正确的测试结果了。

这个时候,说明Jest 这个框架已经被我们正确的使用了。