javascript测试如何进行_如何使用Jest编写单元测试?

Jest 是 JavaScript 单元测试最常用、上手最友好的方案,开箱即用,自带断言库、Mock 工具、覆盖率报告和测试运行器;支持 ES Module,需配置 jest.config.js;通过 test() 和 expect().matcher 编写测试,可模拟依赖、验证异步逻辑。

javascript测试如何进行_如何使用jest编写单元测试?

JavaScript 单元测试最常用、上手最友好的方案就是 Jest。它开箱即用,自带断言库、Mock 工具、覆盖率报告和测试运行器,不需要额外配置就能跑起来。

安装与基础配置

在项目根目录下执行:

npm install --save-dev jest

package.jsonscripts 中添加:

"test": "jest",
"test:watch": "jest --watch"

如果项目使用 ES Module(比如有 type: “module”),需在 jest.config.js 中启用 ESM 支持(Jest 29+ 原生支持):

立即学习“Java免费学习笔记(深入)”;

export default {
testEnvironment: 'node',
extensionsToTreatAsEsm: ['.ts', '.js'],
transform: {
'^.+.js$': ['babel-jest', { presets: ['@babel/preset-env'] }],
},
};

编写第一个测试文件

Jest 默认匹配 *.test.js*.spec.js 文件。比如你有一个 math.js

// math.js
export const add = (a, b) => a + b;
export const multiply = (a, b) => a * b;

对应写一个 math.test.js

// math.test.js
import { add, multiply } from './math.js';

test('add returns correct sum', () => {
expect(add(2, 3)).toBe(5);
});

test('multiply returns correct product', () => {
expect(multiply(4, 5)).toBe(20);
});

运行 npm test 就能看到通过结果。

常用断言与测试技巧

Jest 提供丰富的 expect().matcher 方法,覆盖大多数验证场景:

toBe():严格相等(适合原始值)toEqual():深度相等(适合对象、数组)toBeTruthy() / toBeFalsy():检查真值/假值toThrow():验证是否抛出错误toHaveBeenCalledTimes():配合 jest.fn() 检查函数调用次数

例如测试异步函数:

test('fetches user data', async () => {
const userData = await fetchUser(123);
expect(userData.name).toBe('Alice');
});

或者用 await expect(…).resolves 更安全地捕获 Promise 成功结果。

模拟依赖(Mocking)

测试时经常要隔离外部影响,比如 API 调用、定时器或第三方库。Jest 内置强大 Mock 功能:

jest.fn() 创建模拟函数,可记录调用、返回固定值或抛错jest.mock(‘./module’) 自动 mock 模块(会自动替换其所有导出)jest.useFakeTimers() 替换 setTimeout 等,让时间控制可控

例子:mock 一个发请求的函数

import { fetchData } from './api.js';

jest.mock('./api.js'); // 自动 mock

test('shows loading then data', () => {
fetchData.mockResolvedValue({ id: 1, name: 'Bob' });
// ...触发组件逻辑
expect(fetchData).toHaveBeenCalledTimes(1);
});

基本上就这些。Jest 不复杂但容易忽略细节,比如默认不支持顶层 await、ESM 导入路径别名需要额外配置。从简单函数开始写,逐步覆盖分支逻辑和副作用,测试就会自然成为开发节奏的一部分。

以上就是javascript测试如何进行_如何使用Jest编写单元测试?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1541949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 13:47:08
下一篇 2025年12月21日 13:47:19

相关推荐

  • 深入理解 JavaScript 递归函数的返回值传播

    本文探讨了javascript递归函数中一个常见的返回值丢失问题。当递归调用未显式返回其内部递归调用的结果时,最终的返回值可能无法传播到初始调用者,导致意外的`undefined`。文章通过具体代码示例,详细分析了问题根源,并提供了在递归调用前添加`return`关键字的解决方案,确保返回值沿调用栈…

    2025年12月21日
    000
  • WebRTC统计数据程序化获取与替代方案

    直接通过javascript程序化调用`chrome://webrtc-internals`进行webrtc统计数据转储是不可能的,这主要是出于浏览器安全和隔离机制的考虑。然而,开发者可以通过webrtc提供的`rtcpeerconnection.getstats()` api,结合第三方库(如ji…

    2025年12月21日
    000
  • javascript中的模块化如何实现_ES6模块与CommonJS模块有什么不同

    JavaScript模块化旨在解决代码组织、复用与依赖管理问题;ES6模块静态编译时解析、绑定实时响应、路径字面量限定,CommonJS动态运行时加载、导出值拷贝、支持路径拼接,二者不兼容需工具桥接。 JavaScript模块化是为了解决代码组织、复用和依赖管理问题。ES6模块(import/exp…

    2025年12月21日
    000
  • 在NetSuite中实现拖放文件上传:Suitelet脚本与客户端交互指南

    本教程详细介绍了如何在netsuite中利用suitelet脚本和客户端javascript实现拖放文件上传功能。文章涵盖了suitelet的表单构建、`inlinehtml`字段的使用、客户端拖放事件处理、ajax文件传输以及服务器端文件柜存储逻辑,旨在提供一个完整的、可操作的解决方案,以优化用户…

    2025年12月21日
    000
  • Javascript如何与HTML表单进行交互?

    JavaScript通过DOM操作表单,核心是获取元素、监听事件(submit/input/blur)、读写值(value/checked)和验证提交;需注意preventDefault及事件时机差异。 JavaScript 通过操作 DOM 来读取、验证、提交和动态控制 HTML 表单,核心是获取…

    2025年12月21日
    000
  • 实现持久化暗黑模式图标切换:解决页面重载后图标状态不一致问题

    本教程详细讲解如何使用javascript和localstorage实现网页暗黑模式的持久化,并确保暗黑模式切换图标在页面重载后能正确反映当前模式状态。核心在于页面加载时,根据localstorage中的记录初始化ui(包括图标),从而避免图标状态与实际模式不一致的问题。 掌握持久化暗黑模式切换图标…

    2025年12月21日
    000
  • React应用生产环境环境变量配置深度指南

    本文针对react应用在生产环境中无法读取`.env`文件配置的环境变量问题,深入剖析其工作原理、常见原因及排查方法。通过详细的步骤和示例代码,指导开发者正确配置和使用环境变量,解决api调用层面的`null`响应问题,确保应用在生产环境下的稳定运行。 在React应用开发中,环境变量(如API密钥…

    2025年12月21日
    000
  • JavaScript中的Next.js是什么_它如何简化React应用的服务器端渲染呢

    Next.js 是基于 React 的开源框架,支持开箱即用的 SSR、SSG 和混合渲染,提供自动路由、内置 CSS/图片优化及 ISR 等能力,补足 React 在服务端、构建和部署方面的缺失。 Next.js 是一个基于 React 的开源框架,它让构建服务端渲染(SSR)、静态站点生成(SS…

    2025年12月21日
    000
  • 使用ReactJS构建高级圆形旋转木马/滑块教程

    本教程将指导开发者如何使用ReactJS和CSS transforms构建一个具有复杂视觉效果的圆形旋转滑块,实现类似pango.co.il的居中放大、透视和旋转效果。文章将涵盖状态管理、CSS变换技巧以及保持元素水平的关键策略,帮助您克服在圆形布局中遇到的常见挑战,最终打造出专业级的交互式组件。 …

    2025年12月21日
    000
  • 如何实现排序算法_javascript中数组排序方法有哪些?

    JavaScript数组sort()默认按字符串Unicode排序,数字排序需传入比较函数:升序用a-b,降序用b-a,对象按属性排序用localeCompare或链式判断;原地排序需拷贝数组避免修改原数据。 JavaScript 中数组排序主要靠 sort() 方法,但它默认按字符串 Unicod…

    2025年12月21日
    000
  • 使用 RxJS 构建高效分组异步队列系统

    本文详细探讨了如何利用 RxJS 强大的操作符(如 `groupBy`, `concatMap`, `mergeMap`, `scan`)构建一个能够处理分组、串行化异步任务的队列系统。通过将请求按用户分组,并确保每个用户组内的操作严格顺序执行,同时维护全局状态,解决了传统异步编程中常见的并发控制与…

    2025年12月21日
    000
  • 客户端调用Amazon API Gateway的CORS与认证挑战及解决方案

    当客户端axios请求amazon api gateway遭遇401未授权和cors错误,而postman却能成功时,这通常源于浏览器安全策略与跨域限制。本文将深入探讨此现象的根本原因,并提供一个推荐的解决方案:通过构建一个后端代理服务,有效规避客户端的cors限制,实现对amazon api ga…

    2025年12月21日
    000
  • 如何实现验证码_javascript中图形验证码如何生成?

    图形验证码应由后端生成并校验,前端仅负责请求、展示和提交;纯前端Canvas实现安全性极低,仅适用于学习或非敏感场景。 图形验证码在 JavaScript 中通常不直接“生成”,而是由后端生成并返回图片地址或 Base64 数据,前端负责请求、展示和提交用户输入。纯前端用 Canvas 生成简单验证…

    2025年12月21日
    000
  • 解决iOS设备上异步事件监听器中undefined数据问题的教程

    本文深入探讨了在ios设备上,当javascript代码经过`uglify`等工具压缩后,异步事件监听器中传递给内部函数的`data`参数变为`undefined`的问题。核心原因在于压缩工具将函数内容内联,导致webkit引擎对同名变量`data`的解析出现歧义。解决方案是简单地更改内部函数的参数…

    2025年12月21日
    000
  • Terser模块模式下保留HTML调用函数的策略与实践

    当使用terser在模块模式下压缩javascript代码时,仅在html中调用或未被js模块内部直接引用的函数可能会被误删。即使设置`dead_code: false`或`mangle.reserved`也可能无效。本文将介绍一种确保此类函数在压缩后依然可用的有效策略:通过显式将其挂载到`wind…

    2025年12月21日
    000
  • Node.js Express 应用中静态文件权限管理与EACCES错误排查

    针对%ignore_a_1% express应用中静态文件服务遇到的eacces权限拒绝错误,本教程将详细阐述其常见原因,特别是文件系统权限配置不当的问题。文章将指导读者如何通过创建专用系统用户并合理分配文件所有权,从而安全有效地解决这一问题,确保服务器能够正确访问并提供静态资源。 在开发Node.…

    2025年12月21日
    000
  • javascript的Web API是什么_它能访问哪些浏览器功能?

    Web API 是浏览器提供的、非 JavaScript 语言原生的接口集合,挂载于全局对象(如 window),涵盖 DOM 操作、网络请求(fetch/XmlHttpRequest/WebSocket/AbortController)、设备访问(地理定位/媒体设备/屏幕信息/蓝牙/USB)、存储…

    2025年12月21日
    000
  • 如何实现javascript订阅发布模式_它怎样解耦代码?

    JavaScript订阅发布模式通过事件中心解耦对象,核心为on/emit/off三方法;发布者与订阅者仅依赖事件名,不直接调用,实现松耦合。 JavaScript 的订阅发布模式(Pub/Sub)本质是让对象之间不直接调用,而是通过一个“事件中心”中转消息。它不依赖具体对象实例,只认事件名和回调函…

    2025年12月21日
    000
  • JavaScript如何解析和操作JSON数据?

    JavaScript处理JSON依赖JSON.parse()和JSON.stringify():前者将合法JSON字符串(双引号、无尾逗号、键名引号)转为JS值,支持reviver过滤;后者将对象序列化为字符串,忽略函数/undefined/循环引用,支持属性筛选与缩进美化;解析后按原生对象操作,注…

    2025年12月21日
    000
  • 如何用Javascript实现动画效果?

    JavaScript动画核心是按时间规律更新样式并依赖浏览器渲染,首选requestAnimationFrame实现60fps同步帧更新,避免setInterval/setTimeout掉帧;示例中通过时间戳计算进度完成200px位移。 用 JavaScript 实现动画效果,核心是**按时间规律反…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信