本地运行Jest单元测试报错:TypeError: Cannot redefine property: window
Jest单元测试报错:TypeError: Cannot redefine property: window
问题描述
执行yarn test:unit:watch运行Jest单元测试时,触发如下错误:
Test suite failed to run TypeError: Cannot redefine property: window at Object.<anonymous> (node_modules/jest-canvas-mock/lib/index.js:11:17)
已尝试删除node_modules重新安装、重新克隆仓库,问题仍存在,其他同事未遇到该情况。
解决建议
- 锁定
jest-canvas-mock版本:不同版本的该库对window属性的处理逻辑有差异,在package.json中指定和同事一致的具体版本号,再执行yarn install重新安装。 - 调整Jest mock加载顺序:若Jest配置中同时使用了其他涉及window对象的mock工具(如jsdom相关配置),可能存在加载冲突。修改
setupFiles或setupFilesAfterEnv的顺序,将jest-canvas-mock放在较晚的位置加载,避免先初始化的库锁定window属性。 - 对齐Node.js版本:Node.js版本差异会导致
Object.defineProperty的行为不同,用nvm等版本管理工具切换到和同事相同的Node.js版本。 - 改用手动导入mock:若
jest-canvas-mock被设为全局自动mock,可移除配置中的全局设置,改为在需要的测试文件顶部手动添加import 'jest-canvas-mock',避免全局层面重复定义window属性。 - 排查本地环境配置:检查是否存在自定义的本地Jest配置文件(如
jest.config.local.js)或全局Node.js环境变量,这些可能和仓库默认配置冲突,导致window属性被提前锁定。
内容的提问来源于stack exchange,提问作者Petr
相关产品推荐
相关产品推荐

