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%的过程,也是代码质量不断提升的过程。建议大家从小模块开始,逐步培养写测试的习惯,绝对物超所值。

相关推荐
子兮曰20 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰20 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万20 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝20 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋21 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁21 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端