React测试

为什么要写测试?

很多人觉得写测试浪费时间,尤其是业务压力大的时候。但根据我的踩坑经验,前期省下来的测试时间,后期都得加倍还回去。测试不仅能防止回归bug,更重要的是,它能给你重构的勇气。没有测试覆盖的代码,谁敢动?动不动就牵一发而动全身。

环境搭建

create-react-app创建的项目已经内置了Jest,开箱即用。如果需要额外配置,可以在package.json里扩展Jest配置。我习惯用React Testing Library,它更贴近用户的实际操作方式。

第一个测试:按钮点击

先来个最简单的组件测试。假设有个计数器按钮:

测试代码这样写:

这里用到了getByText查询元素,fireEvent模拟点击,expect进行断言。注意查询方法尽量用能体现用户视角的,别老用testId。

模拟异步操作

实际项目中少不了异步请求。比如用户提交表单:

这里用jest.mock模拟了API模块,waitFor等待组件状态更新。注意异步测试一定要处理好等待时机,不然容易报错。

测试自定义Hook

测试自定义Hook需要把它包装在组件里:

用act包裹状态更新可以避免React的警告。

集成测试

单元测试够了,还得来点集成测试。比如测试整个用户流程:

这种测试能覆盖多个组件的交互,更接近真实场景。

踩坑记录

避免测试实现细节:别去测组件内部状态,要测渲染结果和用户交互。之前我老喜欢测state值,后来发现这纯属自找麻烦。

查询优先级:优先用getByRole,其次是getByLabelText、getByPlaceholderText,最后才是getByTestId。

异步等待:别用sleep,用waitFor或者findBy查询。

清理mock:记得在afterEach里清理mock,不然测试之间会相互影响。

持续集成

测试写好了要在CI里跑。在package.json里配置:

这样每次push都会自动跑测试,生成覆盖率报告。

总结

说实话,刚开始写测试确实觉得慢,但坚持下来后发现真香。现在每次改代码都心里有底,再也不用提心吊胆了。测试覆盖率从零到80%的过程,也是代码质量不断提升的过程。建议大家从小模块开始,逐步培养写测试的习惯,绝对物超所值。

相关推荐
meilindehuzi_a1 分钟前
Workflow 与 Agent 有什么区别:从 LangChain 流水线到智能体决策
前端·人工智能
Bad_Shepherd7 分钟前
vue-element-plus-admin添加自定义svg图标,并且图标选择组件可选自定义图标
vue.js·elementui·前端框架
空中湖1 小时前
Spring AI Agent 编排:ReAct 模式 + 多 Agent 协作实战
人工智能·spring·react.js
吃糖的小孩1 小时前
从只读页面到可控真实探针:我如何给 Owner Console 加手动诊断
前端
谷无姜1 小时前
为什么你的性能优化无效?可能是"木桶效应"在作祟
前端·性能优化
雾非雾1 小时前
《基于具身交互智能数字人技术:如何打造AI数字人宣讲平台"红厅智播”》
前端
Revolution612 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
智能起源2 小时前
关于元素层级过多,导致压祯的问题(使用winform或者WPF应用的webview组件嵌套网页时,动效卡顿问题)
前端
Old Uncle Tom2 小时前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融