升级Jest到27.2.5后测试失败提示result.message is not a function如何解决
问题根因
该报错由jest-chain@1.1.5与Jest v27+的版本不兼容导致:
Jest v27对断言内核做了破坏性变更,匹配器执行失败后返回的result.message属性从原先的可执行函数类型,调整为直接返回错误文本的字符串类型。而jest-chain@1.1.5的内部逻辑仍尝试将result.message作为函数调用,因此触发了result.message is not a function的类型错误。
修复方案
你可以任选以下任意一种方案解决问题:
方案1:升级jest-chain到兼容版本(最推荐)
jest-chain从v1.1.6版本开始已经适配了Jest v27+的结构,直接升级依赖即可:
# yarn yarn add jest-chain@^1.1.6 -D # npm npm install jest-chain@^1.1.6 -D
升级后无需修改其他配置或测试代码,即可正常使用原有链式断言能力,且报错提示会正常返回。
方案2:切换Jest测试运行器兼容旧版依赖
你项目中已经安装了jest-jasmine2运行器,只需在Jest配置中添加testRunner配置项,即可沿用旧版断言返回结构兼容旧版jest-chain:
// 在你的jest.config.js中添加如下配置 module.exports = { // 保留原有其他配置 testRunner: 'jest-jasmine2' }
方案3:移除jest-chain依赖(如果不需要链式断言能力)
如果你的测试代码中没有用到jest-chain提供的链式断言语法,可直接卸载依赖并移除引入:
- 卸载依赖:
# yarn yarn remove jest-chain # npm npm uninstall jest-chain
- 删除
setupTests.ts中的import 'jest-chain';引入行即可。
修改完成后重新执行测试,即可看到正常的断言失败提示,不会再抛出类型错误。
内容的提问来源于stack exchange,提问作者Maksim Shteigervald
相关产品推荐
相关产品推荐

