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 框架入门教程


相关文章
|
7月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
8月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
577 1
|
8月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
8月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
9月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
849 0
|
10月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
342 0
|
10月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
296 1
|
11月前
|
测试技术 Go 开发者
如何为 gRPC Server 编写本地测试代码
本文介绍了如何使用 Go 语言中的 gRPC 测试工具 **bufconn**,通过内存连接实现 gRPC Server 的本地测试,避免端口冲突和外部依赖。结合示例代码,讲解了初始化内存监听、自定义拨号器及编写测试用例的完整流程,并借助断言库提升测试可读性与准确性。适用于单元及集成测试,助力高效开发。
243 1
|
11月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
200 0