React 配置单元测试时使用 Enzyme 出现 Cannot find module 'react-dom/test-utils' 报错信息


过程

最近在给一个 React 项目添加单元测试,使用的是 Jest + Enzyme 按照 官方文档,Enzyme + React 的使用如下, 我安装的适配器是 v16 的版本:


            npm i --save-dev enzyme enzyme-adapter-react-16
        

代码中使用


            import Enzyme from 'enzyme';
            import Adapter from 'enzyme-adapter-react-16';
            
            Enzyme.configure({ adapter: new Adapter() });
        

在使用中报 Cannot find module 'react-dom/test-utils' 这个错误信息

问题排查

在 Google 上搜了一圈没发现相关解决方案,只看到有人也报这个错误是因为用的 React 版本是 v0.14,升级到 v15 以上就能解决

我看了一下我的项目 package.json 文件,发现 React 版本的描述是 "react": "npm:@preact/compat@^17.0.6"

看似好像是说 React 是 v17 的版本,'react-dom/test-utils' 这个工具包在 v17 上应该是有的,问题就在于 preact/compat 这个东西

又在网上搜了一圈,原来此 react 非彼 React

2017年的时候,React 爆出开源协议有问题,百度直接禁止使用 React 与 React Native 框架,而 preact 就是当时用来代替 React 框架的解决方案之一

所以问题在于 preact 与原生 React 的实现方式不一致,代码结构也不可能一致,从 React 迁移到 preact 过程中,与一些第三方框架的结合上会出问题,其中就包括 Enzyme

解决方案

preact官方文档给出了解决方案

我的代码之前使用的是 React 的适配器 enzyme-adapter-react-16 ,先将它移除:


            npm uninstall enzyme-adapter-react-16
        

然后后安装 preact 的适配器 enzyme-adapter-preact-pure


            npm install --save-dev enzyme-adapter-preact-pure
        
代码导入部分也替换为 preact 的适配器 enzyme-adapter-preact-pure

            import Enzyme from 'enzyme';
            import Adapter from 'enzyme-adapter-preact-pure';

            Enzyme.configure({ adapter: new Adapter() });
        

这样问题就解决了,所以最终这其实是一个 preact 库如何使用 Enzyme 框架的问题


back home