javascript单元测试如何编写_有哪些流行的测试框架?

发布时间 - 2025-12-30 00:00:00    点击率:
有效单元测试需明确输入、可观测输出、独立环境;优先选Vitest(Vite项目)或Jest(生态成熟);遇ReferenceError需检查配置中globals或setupFiles。

JavaScript 单元测试的核心是「隔离验证函数行为」,不是跑通整个页面。写对的关键在于:用真实输入触发被测函数,断言其返回值或副作用是否符合预期——而不是测 DOM 渲染或网络请求(那些属于集成或 E2E 范畴)。

怎么写一个有效的单元测试?

有效测试 = 明确的输入 + 可观测的输出 + 独立的执行环境。常见失效原因是测试依赖全局状态、未 mock 外部调用、或断言了不该断言的东西。

  • 只测 functionclass 的公开方法,不测私有辅助函数(除非它们逻辑复杂且被抽离为独立模块)
  • jest.mock()vi.mock() 拦截 fetchlocalStorage、第三方库等外部依赖
  • 避免在测试里写 setTimeoutawait 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-circusts-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.jssetupFilesAfterEnv 引入了正确的 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润色让你的文字更专业