Jest框架如何测试javascript代码【教程】
发布时间 - 2026-02-02 00:00:00 点击率:次Jest是专为JavaScript(尤其是React)设计的开箱即用测试运行器+断言库+模拟系统;默认识别__tests__/、.test.js或.spec.js文件;需配置testEnvironment、setupFilesAfterEnv等适配工程需求。
Jest 本身不是“用来测试 JavaScript 代码”的工具,而是专为 JavaScript(尤其是 React)设计的、开箱即用的测试运行器 + 断言库 + 模拟系统。如果你只是想验证一段普通 JS 函数逻辑是否正确,jest 完全能胜任;但若项目没用到其核心能力(如自动 mock、快照、React 测试工具链),可能反而比 vitest 或原生 node:test 更重。
如何写第一个 Jest 测试用例
关键不是“怎么配”,而是“怎么让 Jest 找到并执行你的测试文件”。默认规则是:匹配 __tests__/*.js、*.test.js 或 *.spec.js 的文件会被识别为测试文件。
- 新建
sum.js:function sum(a, b) { return a + b; } export { sum }; - 新建同目录下的
sum.test.js:import { sum } from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
}); - 确保已安装:
npm install --save-dev jest,并在package.json中添加脚本:"test": "jest" - 运行
npm test—— 不需要额外配置即可跑通
为什么 test() 和 expect() 不报错但测试不通过
常见于异步逻辑未正确等待,或断言对象引用比较出错。Jest 的 expect() 默认做浅比较,对数组/对象内容不深查。
- 错误写法(异步未 await):
test('fetches data', () => { expect(fetch('/api')).resolves.toEqual(...); });→ 应该加async/await或返回 Promise - 错误写法(对象比较):
expect(obj).toBe({a: 1})→ 总是失败,因为引用不同;改用toEqual({a: 1}) - 错误写法(忘记清理定时器):测试中用了
setTimeout但没jest.useFakeTimers()或jest.runAllTimers(),会导致测试卡住或超时
Jest 配置文件 jest.config.js 哪些项最常改
多数项目不需要配置文件就能跑,但以下几项一旦涉及真实工程场景,几乎必调。
-
testEnvironment:默认'jsdom'(模拟浏览器环境),纯 Node 工具库要改成'node' -
setupFilesAfterEnv:用于引入全局测试辅助,比如[',里面可放./src/setupTests.js']jest.mock()或自定义匹配器 -
moduleNameMapper:解决路径别名问题,例如把@/components映射到/src/components -
transformIgnorePatterns:默认跳过node_modules,但若你用了未编译的 ES 模块依赖(如某些现代 UI 库),需把它从忽略列表里移除
真正难的不是写测试,而是判断哪些逻辑值得测、哪些边界 case 容易漏——比如空输入、Promise reject、第三方 API 调用失败、并发修改共享状态。Jest 提供了能力,但要不要用、怎么用,得看函数本身的契约是否清晰。
# react
# javascript
# java
# js
# json
# node
# vite
# npm
# 浏览器
# app
# 工具
# ai
# 并发
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS服务器上快速部署高效网站?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何在阿里云ECS服务器部署织梦CMS网站?
如何正确选择百度移动适配建站域名?
如何用PHP快速搭建CMS系统?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Android中AutoCompleteTextView自动提示
如何选择可靠的免备案建站服务器?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
原生JS获取元素集合的子元素宽度实例
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
海南网站制作公司有哪些,海口网是哪家的?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel如何使用withoutEvents方法临时禁用模型事件
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
高防服务器租用指南:配置选择与快速部署攻略
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Java解压缩zip - 解压缩多个文件或文件夹实例
网站建设要注意的标准 促进网站用户好感度!
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
详解jQuery中基本的动画方法
Android 常见的图片加载框架详细介绍
Firefox Developer Edition开发者版本入口
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
,网页ppt怎么弄成自己的ppt?
网页设计与网站制作内容,怎样注册网站?
如何彻底删除建站之星生成的Banner?
,怎么在广州志愿者网站注册?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
详解Android中Activity的四大启动模式实验简述
如何在自有机房高效搭建专业网站?


