您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

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

时间:2023-11-08 13:45:46  来源:微信公众号  作者:写代码的宝哥

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,查看结果。

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

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

存在的问题

不过目前存在 2 个问题:

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

如何解决呢?有 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
  • ts-jest 是我们必须要安装的
  • ts-jest 依赖 jest 和 typescript,因此也安装下(jest 在上一步已经安装,所以在这里是可选的)
  • 安装 @types/jest 是为了获取类型提示支持

生成配置文件

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

npx ts-jest config:init

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

/** @type {import('ts-jest').JestConfigWithTsJest} */
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,查看结果。

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

也成功了。不过有一条告警,建议我们将 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:目前最广泛使用的前端 JavaScript 测试框架图片

下一步

以上,我们就学完了 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



Tags:Jest   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Jest:目前最广泛使用的前端 JavaScript 测试框架
Jest 是一个简单易用的 JavaScript 测试框架。最初由 Meta 公司团队维护。2022 年 5 月,Meta 公司正式将自己的开源项目Jest 移交给 OpenJS Foundation[1],这表示 Jest 由公司...【详细内容】
2023-11-08  Search: Jest  点击:(341)  评论:(0)  加入收藏
前端自动化测试 之 Jest 测试框架应用
什么是自动化测试在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化...【详细内容】
2023-05-18  Search: Jest  点击:(368)  评论:(0)  加入收藏
前端测试框架Jest——语法篇
使用匹配器使用不同匹配器可以测试输入输出的值是否符合预期。下面介绍一些常见的匹配器。普通匹配器最简单的测试值的方法就是看是否精确匹配。首先是toBe()test('two...【详细内容】
2020-06-23  Search: Jest  点击:(428)  评论:(0)  加入收藏
▌简易百科推荐
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(4)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践——如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(25)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(23)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(52)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(56)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(65)  评论:(0)  加入收藏
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!
本文作者在综合成本因素之下,决定用 Java 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是...【详细内容】
2024-01-11    CSDN  Tags:JavaScript   点击:(97)  评论:(0)  加入收藏
站内最新
站内热门
站内头条