Node.js:Jest测试框架测试test代码

简介: Node.js:Jest测试框架测试test代码

Jest 是一个令人愉快的 JavaScript 测试框架,专注于 简洁明快。

目录

VS Code插件

Jest

// 如果不想自动运行,可以设置关闭
"jest.autoRun": "off"

安装jest

$ pnpm i -D jest

基本使用-Node.js

目录结构

$ tree -I node_modules
.
├── package.json
├── pnpm-lock.yaml
├── sum.js
└── sum.test.js

依赖 package.json

{
    "devDependencies": {
        "jest": "^29.3.1"
    }
}

功能函数 sum.js

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

测试函数 sum.test.js

const sum = require("./sum.js");
test("1 + 2 = 3", function () {
  expect(sum(1, 2)).toBe(3);
});

运行测试

$ npx jest
 PASS  ./sum.test.js
  ✓ 1 + 2 = 3 (1 ms)
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.57 s
Ran all test suites.

匹配器

// 精确匹配
expect(1).toBe(1);
// 递归检查对象或数组的每个字段
expect([1, 2, 3]).toEqual([1, 2, 3]);

测试函数调用情况

map.js

function map(list, callback) {
  return list.map(callback);
}
module.exports = map;

map.test.js

const map = require("./map.js");
// 定义分组
describe("测试map函数", () => {
  test("测试回调函数调用次数", function () {
    const fn = jest.fn((x) => x * 2);
    map([1, 2, 3], fn);
    // 测试回调函数调用次数
    expect(fn.mock.calls.length).toEqual(3);
  });
  test("测试回调函数返回值", function () {
    const fn = jest.fn((x) => x * 2);
    map([1, 2, 3], fn);
    expect(fn.mock.results[0].value).toEqual(2);
    expect(fn.mock.results[1].value).toEqual(4);
    expect(fn.mock.results[2].value).toEqual(6);
  });
});

查看测试覆盖率

$ npx jest --coverage
 PASS  ./map.test.js
  测试map函数
    ✓ 测试回调函数调用次数 (2 ms)
    ✓ 测试回调函数返回值 (1 ms)
----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 map.js   |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.757 s, estimated 1 s
Ran all test suites.

目录coverage/lcov-report 下会生成一个网页版的覆盖率报告

image.png

基本使用-ES6

安装依赖

npm install -D jest babel-jest babel-core babel-preset-env regenerator-runtime

高版本

npm install -D jest babel-jest @babel/core @babel/preset-env

备注:安装babel 为了让jest 支持ES6语法 import/export

package.json

{
  "type": "module",
  "scripts": {
    "test": "jest --verbose"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-jest": "^28.1.3",
    "babel-preset-env": "^1.7.0",
    "jest": "^28.1.3",
    "regenerator-runtime": "^0.13.9"
  }
}

babel 配置文件 .babelrc

babel-preset-env

{
  "presets": ["env"]
}

@babel/preset-env

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

测试示例

src/functions.js

export default {
  sum(a, b) {
    return a + b
  },
}

tests/functions.test.js

import functions from '../src/functions'
test('sum(2 + 2) 等于 4', () => {
  expect(functions.sum(2, 2)).toBe(4)
})

运行测试

$ npx jest
 PASS  tests/functions.test.js
  ✓ sum(2 + 2) 等于 4 (1 ms)
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        1.141 s
Ran all test suites.

参考

使用Jest测试JavaScript (入门篇)

js:jest报错RangeError: Maximum call stack size exceeded

【Bilibili视频】JS 测试:Jest 框架入门教程


相关文章
|
16天前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
3月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
92 1
|
4月前
|
JavaScript 前端开发
怀孕b超单子在线制作,p图一键生成怀孕,JS代码装逼娱乐
模拟B超单的视觉效果,包含随机生成的胎儿图像、医疗文本信息和医院标志。请注意这仅用于前端开发学习
|
6月前
|
JavaScript 前端开发 API
|
4月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
72 0
|
6月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
453 9
|
7月前
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
479 11
|
7月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章