You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest测试对比对象时报错TypeError: (0 , _diff.structuredPatch) is not a function

解决Jest 22.4.2对比对象时抛出TypeError: (0 , _diff.structuredPatch) is not a function的问题

我之前也碰到过一模一样的问题,在Jest 22.x搭配Node 8.x的Windows环境下,对比字符串完全正常,但一对比不同对象就报错。本质原因是项目依赖的diff包版本和Jest 22.4.2不兼容——Jest在生成对象差异报告时会调用diff包的structuredPatch方法,但如果你的项目里装了4.x及以上版本的diff,就会出现这个方法找不到的情况,因为diff 4.x重构了导出结构,不再直接暴露这个方法。

解决方案一:锁定兼容的diff版本

直接安装Jest 22.4.2适配的diff稳定版本(推荐3.5.0,这是Jest 22.x官方依赖的版本范围里的稳定版):

  1. 先卸载当前的diff包:
npm uninstall diff
  1. 安装指定版本:
npm install diff@3.5.0 --save-dev

解决方案二:清理依赖重新安装

如果不确定是哪个依赖导致的冲突,可以彻底清理后重新安装所有依赖:

  1. 清除npm缓存:
npm cache clean --force
  1. 删除node_modules文件夹和package-lock.json文件(Windows命令):
rmdir /s /q node_modules
del package-lock.json
  1. 重新安装所有依赖:
npm install

验证修复

运行你的测试代码:

test('test', () => { 
  const objectA = { foo: 'bar' }; 
  const objectB = { bar: 'foo' }; 
  expect(objectA).toEqual(objectB); 
});

现在应该能正常显示两个对象的差异对比结果,而不是抛出那个TypeError了。

内容的提问来源于stack exchange,提问作者Cornel Janssen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:31:03