使用Jest mock Zustand函数时报错TypeError: create is not a function
解决方案
1. 核心问题修复:调整zustand mock的导出格式
你遇到的create is not a function报错本质是CommonJS模块规范下导入导出不匹配:你的项目全栈使用CommonJS规范,TS/Babel转译import create from 'zustand'时会自动取导入对象的default属性,但官方wiki给出的mock默认只导出了根函数,没有挂载default属性,导致导入的create为undefined。
修改src/__mocks__/zustand.js内容如下:
const actualZustand = jest.requireActual('zustand'); const createMock = (createState) => { const store = actualZustand(createState); // 保留状态重置能力 store.mockReset = () => store.setState(store.getInitialState()); return store; }; // 同时兼容根导出和default导出,适配CommonJS转译逻辑 module.exports = createMock; module.exports.default = createMock; // 如果你的代码中用到了zustand的其他导出(比如devtools、persist等中间件),在此处补充导出即可 // module.exports.devtools = actualZustand.devtools;
2. 移除不必要的ESM相关配置
你的项目package.json的type为commonjs、TS配置module为CommonJS,完全不需要ESM支持,多余的ESM配置反而会导致模块解析逻辑混乱:
- 删除测试启动命令中的
NODE_OPTIONS=--experimental-vm-modules参数,直接使用cross-env jest启动即可 - 删除Jest配置中的
extensionsToTreatAsEsm字段
3. 解决冗余配置与警告
- 删除Jest配置中重复声明的
moduleDirectories字段(你贴的配置中出现了两次相同的moduleDirectories配置,属于冗余内容) - 新增
haste配置解决模块命名冲突警告,在Jest配置中添加如下字段即可:
该警告是Electron React Boilerplate的默认结构(根目录和src目录下各有一个package.json)导致的,不影响运行但添加配置可消除警告。"haste": { "allowDuplicates": true }
验证步骤
执行npx jest --no-cache清空缓存并运行测试,报错即可解决。
内容的提问来源于stack exchange,提问作者fowl-
相关产品推荐
相关产品推荐

