文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jest:目前最广泛使用的前端 JavaScript 测试框架

2024-11-30 05:50

关注

Jest 是一个简单易用的 JavaScript 测试框架。最初由 Meta 公司团队维护。2022 年 5 月,Meta 公司正式将自己的开源项目Jest 移交给 OpenJS Foundation[1],这表示 Jest 由公司驱动变为社区驱动,有 OpenJS Foundation 保底,Jest 将不会因公司发展需要而停止维护。

下面我们就来学习吧。

快速上手

初始化项目

首先创建项目目录:

mkdir jest-demos && cd jest-demos
npm init -y

然后,安装 Jest 依赖:

npm install --save-dev jest

第一个测试文件

创建待测试文件 src/sum.js:

function sum(a, b) {
  return a + b;
}
module.exports = sum;

创建测试文件 __tests__/sum.test.js:

const sum = require('../src/sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

注:按照约定,测试文件以 .test.js 或 .spec.js 结尾,并且放在 __tests__ 目录中。

package.json 文件中增加脚本:

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

终端上执行命令 npm test,查看结果。

图片

这样我们就完成了第一个测试文件的编写和集成。

存在的问题

不过目前存在 2 个问题:

如何解决呢?有 2 个方案:

  1. 使用 Babel + @babel/preset-env + @babel/preset-typescript 的组合,或者
  2. 使用 ts-jest(基于 TypeScript)

不过为了得到完整的类型检查支持,我们选择 ts-jest。下面就来学习。

配置 ts-jest

ts-jest 本质上就是 Jest transformer,支持你在 TypeScript 项目里使用 Jest。

这部分配置我们参照官方教程[2]。

安装必要依赖

首先安装必要依赖:

npm install --save-dev ts-jest jest typescript @types/jest

生成配置文件

然后,生成 Jest 配置文件——这里借助 ts-jest 指令来生成:

npx ts-jest config:init

这一步会在项目根目录下创建 jest.config.js 文件:


module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

修改文件后缀

将 src/sum.js 和 __tests__/sum.test.js 的文件后缀改成 .ts,并将代码改成 ES Module 方式组织。

// src/sum.ts
function sum(a, b) {
  return a + b;
}
export default sum;
// __tests__/sum.test.ts
import sum from "../src/sum";

test("adds 1 + 2 to equal 3", () => {
  expect(sum(1, 2)).toBe(3);
});

终端上执行命令 npm test,查看结果。

图片

也成功了。不过有一条告警,建议我们将 tsconfig.json 中的 esModuleinterop 字段设置成 true。

释出 tsconfig.json

为了设置 esModuleinterop 字段,我们将 tsconfig.json 文件释放出来。

$ npx tsx --init

Created a new tsconfig.json with:         
                                           TS
  target: es2016
  module: commonjs
  strict: true
  esModuleInterop: true
  skipLibCheck: true
  forceConsistentCasingInFileNames: true

释出的配置中包含 esModuleInterop: true 选择,因此我们也无需修改。不过因为开启了严格模式(strict: true),因此还要对源代码做类型注解。

// src/sum.ts
function sum(a: number, b: number) {
  return a + b;
}
export default sum;

再次运行测试——成功!

图片

下一步

以上,我们就学完了 Jest 基础使用和配置的部分的内容。下一步大家可以在 Jest 官网上按照下面的顺序自行学习。

  1. 学习匹配器(Matcher)的使用[3],常用的匹配器有 .toBe()、.toEqual() 和 .toStrictEqual(),完整列表参见这里:https://jestjs.io/docs/expect[4]
  2. 学习如何测试异步代码[5],主要有 2 种异步调用方式:回调和 Promise。回调是通过 done 函数,Promise 则有多种测试方式:直接返回、使用 async await、或者配合前面任意种一方式直接丢给 expect 函数(类似 return|await expect(promise).resolves|rejects.toBe())
  3. 学习使用跟启动、清理相关的一些调用周期函数[6]。比如:beforeAll()、beforeEach()。同时 Jest 还提供了类似 test.only()/describe.only() 的函数,让你仅测试一小部分的代码
  4. 学习 Mock 函数的使用[7]。这部分的内容经常会用到,比如 Mock 函数的创建、实现和使用、如果 Mock 第三方模块(全部和局部)
  5. 学习如何配置浏览器环境的测试[8](利用 jsdom),需要安装 jest-environment-jsdom

References

[1]OpenJS Foundation:https://jestjs.io/blog

[2]官方教程:https://kulshekhar.github.io/ts-jest/docs/getting-started/installation

[3]匹配器(Matcher)的使用:https://jestjs.io/docs/using-matchers

[4]https://jestjs.io/docs/expect:https://jestjs.io/docs/expect

[5]测试异步代码:https://jestjs.io/docs/asynchronous

[6]使用跟启动、清理相关的一些调用周期函数:https://jestjs.io/docs/setup-teardown

[7]学习 Mock 函数的使用:https://jestjs.io/docs/mock-functions

[8]如何配置浏览器环境的测试:https://jestjs.io/docs/tutorial-jquery

来源:写代码的宝哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯