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

使用Jest mock fs模块动态导入控制器时遇existsSync导出错误

问题原因及解决方案

核心原因

Node.js的fs模块是CommonJS格式,当在ESM模块中使用import { existsSync } from 'fs'这类命名导入时,Node.js会自动把CommonJS模块的导出成员映射为ESM的顶层命名导出。

但你当前的mock仅将existsSync放在了default对象里,没有把它作为mock模块的顶层导出。当my.controller.js中使用了fs的命名导入时,Jest提供的mock模块找不到对应的顶层导出,就会抛出SyntaxError: The requested module 'fs' does not provide an export named 'existsSync'错误。

修复方案

调整mock的结构,同时提供顶层命名导出和默认导出,兼容两种导入方式:

jest.unstable_mockModule('fs', () => {
  const mockFs = {
    readFileSync: () => CONTENT_DATA,
    existsSync: () => {},
  };
  // 同时导出顶层成员和default对象
  return {
    ...mockFs,
    default: mockFs,
  };
});

如果你的业务代码只使用默认导入(import fs from 'fs'),那需要检查my.controller.js是否误用了命名导入,调整代码或mock结构均可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:52:03