是否可同时使用Enzyme与react-testing-library?是否需要统一测试库?
双测试库兼容方案
如果暂时没有迁移计划,可以通过调整配置实现两个测试库同时运行,操作步骤如下:
- 拆分独立初始化配置:不要将两个测试库的初始化逻辑都写入全局的
setupTests.js,单独拆分Enzyme初始化逻辑到setupEnzyme.js(包含适配器注册、全局挂载方法封装等),react-testing-library的全局配置(如自定义query扩展、全局mock封装等)拆分到setupRTL.js。 - 修改Jest配置加载多个初始化文件,修改
jest.config.js中的setupFilesAfterEnv配置项,数组形式同时引入两个配置文件:
module.exports = { // 其余Jest配置保持不变 setupFilesAfterEnv: [ '<rootDir>/src/setupEnzyme.js', '<rootDir>/src/setupRTL.js' ] }
- 排查冲突逻辑:如果存在全局变量重写、公共模块mock重复定义等冲突,将冲突逻辑抽离到单独的
setupGlobalMocks.js文件中统一配置,避免两边重复定义报错。 - 完全隔离运行(可选):如果以上配置仍然有兼容问题,可以给两类测试用例区分文件后缀,Enzyme用例命名为
*.enzyme.test.jsx,react-testing-library用例命名为*.rtl.test.jsx,在Jest配置中按文件匹配规则分别指定不同的初始化文件,实现运行环境完全隔离。
统一测试库迁移建议
长期来看更推荐将所有测试用例统一迁移到react-testing-library:
- Enzyme官方已经在2022年停止维护,对React 18及之后的新版本特性(如并发渲染、Server Component等)支持极差,后续React版本迭代必然会出现更多无法修复的兼容问题。
- react-testing-library是React官方推荐的测试工具,设计理念更贴近用户真实使用场景,产出的测试用例可维护性更高,生态支持也更完善。
- 迁移成本可控:可以采用渐进式迁移方案,新需求全部使用react-testing-library编写用例,存量Enzyme用例先按上述兼容方案运行,后续业务迭代过程中逐步替换即可。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

