javascript单元测试如何编写_有哪些流行的测试框架?
发布时间 - 2025-12-30 00:00:00 点击率:次有效单元测试需明确输入、可观测输出、独立环境;优先选Vitest(Vite项目)或Jest(生态成熟);遇ReferenceError需检查配置中globals或setupFiles。
JavaScript 单元测试的核心是「隔离验证函数行为」,不是跑通整个页面。写对的关键在于:用真实输入触发被测函数,断言其返回值或副作用是否符合预期——而不是测 DOM 渲染或网络请求(那些属于集成或 E2E 范畴)。
怎么写一个有效的单元测试?

有效测试 = 明确的输入 + 可观测的输出 + 独立的执行环境。常见失效原因是测试依赖全局状态、未 mock 外部调用、或断言了不该断言的东西。
- 只测
function或class的公开方法,不测私有辅助函数(除非它们逻辑复杂且被抽离为独立模块) - 用
jest.mock()或vi.mock()拦截fetch、localStorage、第三方库等外部依赖 - 避免在测试里写
setTimeout或await new Promise(resolve => setTimeout(resolve, 10));改用jest.runAllTimers()或vi.advanceTimersByTime() - 每个
test()块必须有且仅有一个expect()断言主逻辑(可额外加 1–2 个辅助断言,如调用次数)
test('sum returns correct result for positive numbers', () => {
expect(sum(2, 3)).toBe(5);
});
test('sum handles negative input', () => {
expect(sum(-1, 1)).toBe(0);
});
Jest 和 Vitest 怎么选?
两者都支持 describe/test/expect 语法,但底层差异影响开发体验和 CI 成本。
-
Jest是历史最久、生态最全的方案,create-react-app默认集成,插件丰富(如jest-circus、ts-jest),但启动慢、内存占用高 -
Vitest基于 Vite,冷启动快、HMR 支持好,原生支持import.meta.vitest,对 TypeScript 和 ESM 友好,但部分 Jest 插件(如jest-coverage-istanbul-reporter)需替换为vitest-coverage-v8 - 若项目已用 Vite,优先选
Vitest;若团队熟悉 Jest 且无性能瓶颈,继续用Jest更稳妥
遇到 ReferenceError: beforeEach is not defined 怎么办?
这是测试运行器未正确加载全局 API 的典型表现,不是代码写错了。
- 检查
vitest.config.ts是否漏了globals: true配置(Vitest) - 确认
jest.config.js中setupFilesAfterEnv引入了正确的 setup 文件(如[')./src/setupTests.ts'] - 确保测试文件后缀是
.test.ts或.spec.ts,且没被testMatch规则排除 - 使用 VS Code 时,别误装了 “Jest Runner” 扩展却配了 Vitest —— 扩展与运行器不匹配会导致全局函数不可见
真正难的不是写第一个 test(),而是坚持在加新逻辑前先补测试覆盖率缺口,以及学会把“不确定要不要测”的模块,拆成更小、职责更单一的函数——那才是单元测试能落地的前提。
# react
# javascript
# java
# js
# vite
# typescript
# app
# ai
# vs code
# 性能瓶颈
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Docker环境搭建教程_Laravel Sail使用指南
Laravel怎么使用Intervention Image库处理图片上传和缩放
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
如何在Tomcat中配置并部署网站项目?
浅述节点的创建及常见功能的实现
如何在阿里云香港服务器快速搭建网站?
javascript读取文本节点方法小结
佛山网站制作系统,佛山企业变更地址网上办理步骤?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何快速查询域名建站关键信息?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何在万网开始建站?分步指南解析
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何在 Pandas 中基于一列条件计算另一列的分组均值
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
浅谈redis在项目中的应用
Laravel如何配置和使用缓存?(Redis代码示例)
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何为不同团队 ID 动态生成多个独立按钮
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何挑选最适合建站的高性能VPS主机?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel怎么在Controller之外的地方验证数据
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
如何批量查询域名的建站时间记录?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel如何使用Vite进行前端资源打包?(配置示例)
如何快速上传建站程序避免常见错误?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
进行网站优化必须要坚持的四大原则
Python并发异常传播_错误处理解析【教程】
如何在阿里云域名上完成建站全流程?
如何在万网利用已有域名快速建站?
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何快速上传自定义模板至建站之星?
简历没回改:利用AI润色让你的文字更专业

