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

使用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配置中添加如下字段即可:
    "haste": {
      "allowDuplicates": true
    }
    
    该警告是Electron React Boilerplate的默认结构(根目录和src目录下各有一个package.json)导致的,不影响运行但添加配置可消除警告。

验证步骤

执行npx jest --no-cache清空缓存并运行测试,报错即可解决。


内容的提问来源于stack exchange,提问作者fowl-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:39:01