当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-08 17:03:21 381观看
导读Jest 是一个简单易用的 JavaScript 测试框架。最初由 Meta 公司团队维护。2022 年 5 月,Meta 公司正式将自己的开源项目Jest 移交给 OpenJS Foundation[1],这表示 Jest 由公司驱动变为社区驱动,有 OpenJS Foundation 保

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

下面我们就来学习吧。oCT28资讯网——每日最新资讯28at.com

快速上手

初始化项目

首先创建项目目录:oCT28资讯网——每日最新资讯28at.com

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

然后,安装 Jest 依赖:oCT28资讯网——每日最新资讯28at.com

npm install --save-dev jest

第一个测试文件

创建待测试文件 src/sum.js:oCT28资讯网——每日最新资讯28at.com

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

创建测试文件 __tests__/sum.test.js:oCT28资讯网——每日最新资讯28at.com

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

注:按照约定,测试文件以 .test.js 或 .spec.js 结尾,并且放在 __tests__ 目录中。oCT28资讯网——每日最新资讯28at.com

package.json 文件中增加脚本:oCT28资讯网——每日最新资讯28at.com

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

终端上执行命令 npm test,查看结果。oCT28资讯网——每日最新资讯28at.com

图片图片oCT28资讯网——每日最新资讯28at.com

这样我们就完成了第一个测试文件的编写和集成。oCT28资讯网——每日最新资讯28at.com

存在的问题

不过目前存在 2 个问题:oCT28资讯网——每日最新资讯28at.com

  • Jest 只支持 CommonJS 代码,并不支持 ES Module 代码,为了测试 ES Module 代码,我们只能将 ES Module 代码转换为 CommonJS 代码
  • Jest 也不支持 TypeScript 代码

如何解决呢?有 2 个方案:oCT28资讯网——每日最新资讯28at.com

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

不过为了得到完整的类型检查支持,我们选择 ts-jest。下面就来学习。oCT28资讯网——每日最新资讯28at.com

配置 ts-jest

ts-jest 本质上就是 Jest transformer,支持你在 TypeScript 项目里使用 Jest。oCT28资讯网——每日最新资讯28at.com

这部分配置我们参照官方教程[2]。oCT28资讯网——每日最新资讯28at.com

安装必要依赖

首先安装必要依赖:oCT28资讯网——每日最新资讯28at.com

npm install --save-dev ts-jest jest typescript @types/jest
  • ts-jest 是我们必须要安装的
  • ts-jest 依赖 jest 和 typescript,因此也安装下(jest 在上一步已经安装,所以在这里是可选的)
  • 安装 @types/jest 是为了获取类型提示支持

生成配置文件

然后,生成 Jest 配置文件——这里借助 ts-jest 指令来生成:oCT28资讯网——每日最新资讯28at.com

npx ts-jest config:init

这一步会在项目根目录下创建 jest.config.js 文件:oCT28资讯网——每日最新资讯28at.com

/** @type {import('ts-jest').JestConfigWithTsJest} */module.exports = {  preset: 'ts-jest',  testEnvironment: 'node',};

修改文件后缀

将 src/sum.js 和 __tests__/sum.test.js 的文件后缀改成 .ts,并将代码改成 ES Module 方式组织。oCT28资讯网——每日最新资讯28at.com

// src/sum.tsfunction sum(a, b) {  return a + b;}export default sum;
// __tests__/sum.test.tsimport sum from "../src/sum";test("adds 1 + 2 to equal 3", () => {  expect(sum(1, 2)).toBe(3);});

终端上执行命令 npm test,查看结果。oCT28资讯网——每日最新资讯28at.com

图片图片oCT28资讯网——每日最新资讯28at.com

也成功了。不过有一条告警,建议我们将 tsconfig.json 中的 esModuleinterop 字段设置成 true。oCT28资讯网——每日最新资讯28at.com

释出 tsconfig.json

为了设置 esModuleinterop 字段,我们将 tsconfig.json 文件释放出来。oCT28资讯网——每日最新资讯28at.com

$ npx tsx --initCreated a new tsconfig.json with:                                                    TS  target: es2016  module: commonjs  strict: true  esModuleInterop: true  skipLibCheck: true  forceConsistentCasingInFileNames: true

释出的配置中包含 esModuleInterop: true 选择,因此我们也无需修改。不过因为开启了严格模式(strict: true),因此还要对源代码做类型注解。oCT28资讯网——每日最新资讯28at.com

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

再次运行测试——成功!oCT28资讯网——每日最新资讯28at.com

图片图片oCT28资讯网——每日最新资讯28at.com

下一步

以上,我们就学完了 Jest 基础使用和配置的部分的内容。下一步大家可以在 Jest 官网上按照下面的顺序自行学习。oCT28资讯网——每日最新资讯28at.com

  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/blogoCT28资讯网——每日最新资讯28at.com

[2]官方教程:https://kulshekhar.github.io/ts-jest/docs/getting-started/installationoCT28资讯网——每日最新资讯28at.com

[3]匹配器(Matcher)的使用:https://jestjs.io/docs/using-matchersoCT28资讯网——每日最新资讯28at.com

[4]https://jestjs.io/docs/expect:https://jestjs.io/docs/expectoCT28资讯网——每日最新资讯28at.com

[5]测试异步代码:https://jestjs.io/docs/asynchronousoCT28资讯网——每日最新资讯28at.com

[6]使用跟启动、清理相关的一些调用周期函数:https://jestjs.io/docs/setup-teardownoCT28资讯网——每日最新资讯28at.com

[7]学习 Mock 函数的使用:https://jestjs.io/docs/mock-functionsoCT28资讯网——每日最新资讯28at.com

[8]如何配置浏览器环境的测试:https://jestjs.io/docs/tutorial-jqueryoCT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17784-0.htmlJest:目前最广泛使用的前端 JavaScript 测试框架

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Java并行编程:利用并发技术加速应用性能

下一篇: 想要微信小程序+Uniapp?XBoot开源项目助你快速开发!

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top