Jest 是一个简单易用的 JAVAScript 测试框架 。最初由 Meta 公司团队维护 。2022 年 5 月,Meta 公司正式将自己的开源项目Jest 移交给 OpenJS Foundation[1] , 这表示 Jest 由公司驱动变为社区驱动,有 OpenJS Foundation 保底,Jest 将不会因公司发展需要而停止维护 。
下面我们就来学习吧 。
快速上手初始化项目首先创建项目目录:
mkdir jest-demos && cd jest-demosnpm 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 测试框架](http://img.jiangsulong.com/231108/1H50052T-0.jpg)
文章插图
图片
这样我们就完成了第一个测试文件的编写和集成 。
存在的问题不过目前存在 2 个问题:
- Jest 只支持 CommonJS 代码,并不支持 ES Module 代码,为了测试 ES Module 代码,我们只能将 ES Module 代码转换为 CommonJS 代码
- Jest 也不支持 TypeScript 代码
- 使用 Babel + @babel/preset-env + @babel/preset-typescript 的组合 , 或者
- 使用 ts-jest(基于 TypeScript)
配置 ts-jestts-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 是为了获取类型提示支持
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.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,查看结果 。![Jest:目前最广泛使用的前端 JavaScript 测试框架](http://img.jiangsulong.com/231108/1H50023Q-1.jpg)
文章插图
图片
也成功了 。不过有一条告警,建议我们将 tsconfig.json 中的 esModuleinterop 字段设置成 true 。
释出 tsconfig.json为了设置 esModuleinterop 字段,我们将 tsconfig.json 文件释放出来 。
$ npx tsx --initCreated a new tsconfig.json with:TStarget: es2016module: commonjsstrict: trueesModuleInterop: trueskipLibCheck: trueforceConsistentCasingInFileNames: true
释出的配置中包含 esModuleInterop: true 选择 , 因此我们也无需修改 。不过因为开启了严格模式(strict: true),因此还要对源代码做类型注解 。// src/sum.tsfunction sum(a: number, b: number) {return a + b;}export default sum;
再次运行测试——成功!![Jest:目前最广泛使用的前端 JavaScript 测试框架](http://img.jiangsulong.com/231108/1H5004D3-2.jpg)
文章插图
图片
下一步以上,我们就学完了 Jest 基础使用和配置的部分的内容 。下一步大家可以在 Jest 官网上按照下面的顺序自行学习 。
- 学习匹配器(Matcher)的使用[3],常用的匹配器有 .toBe()、.toEqual() 和 .toStrictEqual(),完整列表参见这里:https://jestjs.io/docs/expect[4]
推荐阅读
- 教您彻底理解索引的最左匹配原则!
- 皮肤最好的状态是什么?
- 苹果减肥法 苹果减肥法一天吃几个苹果最好
- 42岁宋佳美到国外去了!穿“最小码”紧身裙秀凹凸曲线,身材不输给欧美超模
- 听我一句劝:女人最好别留这3种发型!第一种显老、第二种难打理
- 最有凝聚力的团队名字 最霸气最潮的团队名字
- 虾和哪些蔬菜最佳搭配 大虾和哪些蔬菜一块炒
- 她被誉为最美郭襄,爆红却患精神病,嫁给外国人,50多岁住在山上
- Steam最新销量榜出炉:国区《完蛋!我被美女包围了》力压《使命召唤》拿下冠军
- 温州最具代表性的六道名菜