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


相关文章
|
1月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
44 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
2月前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
171 0
|
13天前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
36 11
|
14天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
19天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
35 2
|
19天前
|
JavaScript 测试技术 API
Jest进阶:测试 Vue 组件
Jest进阶:测试 Vue 组件
|
20天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
30 2