React Apollo项目引入MockedProvider测试时报graphql.isType不是函数错误
解决方案
报错根因
TypeError: graphql.isType is not a function 报错的核心原因是项目中graphql包的版本与@apollo/client依赖要求的版本不兼容:isType是graphql v15.0.0及以上版本才提供的内置方法,当项目本地安装的graphql版本低于该要求、或者存在多个graphql版本共存时,就会触发该导入错误。
修复步骤
- 第一步:清理本地冗余依赖与锁文件
rm -rf node_modules package-lock.json yarn.lock pnpm-lock.yaml
- 第二步:安装兼容版本的graphql包,优先选择和当前Apollo Client适配性最好的v16稳定版:
# npm npm install graphql@16 --save-dev # yarn yarn add graphql@16 --dev # pnpm pnpm add graphql@16 --save-dev
- 第三步:校验是否存在多版本graphql共存,执行对应包管理工具的查询命令:
# npm npm ls graphql # yarn yarn list graphql # pnpm pnpm ls graphql
如果查询结果显示有多个不同版本的graphql被安装,在package.json中添加版本锁定配置即可:
// npm 用户添加 overrides 字段 { "overrides": { "graphql": "16.8.1" } } // yarn/pnpm 用户添加 resolutions 字段 { "resolutions": { "graphql": "16.8.1" } }
配置完成后重新执行依赖安装命令,再运行测试即可正常导入MockedProvider。
额外排查点
如果完成上述操作后仍然报错,检查jest配置文件中是否存在moduleNameMapper规则错误将graphql映射到了其他路径,或者配置了打包排除规则忽略了graphql依赖,删除对应异常配置即可。
内容的提问来源于stack exchange,提问作者Jackson Small
相关产品推荐
相关产品推荐

