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

如何在Mocha测试中提供ESModule实现以满足CommonJS模块依赖?

问题:Mocha测试中无法找到自定义的"prefs"模块

背景

我在编写Mocha测试用例测试自有代码时,依赖了一个采用CommonJS模块规范的core npm包。该包的synchronizer.js文件通过以下代码引入了一个需要外部提供的prefs模块:

const {Prefs} = require("prefs");

我已经在测试目录中实现了这个prefs模块(路径为test/unit/prefs/prefs.mjs),且导出符合synchronizer.js的预期,但运行测试时出现了模块找不到的错误。

错误日志

Error: Cannot find module 'prefs'
Require stack:
- /Users/developer/Documents/dev/src/project/node_modules/core/lib/synchronizer.js
- /Users/developer/Documents/dev/src/project/node_modules/core/lib/index.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1026:15)
    at Module._load (node:internal/modules/cjs/loader:872:27)
    at Module.require (node:internal/modules/cjs/loader:1092:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/Users/developer/Documents/dev/src/project/node_modules/core/lib/synchronizer.js:26:17)
    at Module._compile (node:internal/modules/cjs/loader:1205:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1259:10)
    at Module.load (node:internal/modules/cjs/loader:1068:32)
    at Module._load (node:internal/modules/cjs/loader:909:12)
    at Module.require (node:internal/modules/cjs/loader:1092:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/Users/developer/Documents/dev/src/project/node_modules/core/lib/index.js:33:24)
    at Module._compile (node:internal/modules/cjs/loader:1205:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1259:10)
    at Module.load (node:internal/modules/cjs/loader:1068:32)
    at Module._load (node:internal/modules/cjs/loader:909:12)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:169:29)
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

项目结构

\sdk
\test
     \unit
          \ prefs
                 \prefs.mjs
          \test.js

package.json配置

"dependencies": {
     ...
     "core": "^0.10.1",
     ...
   },
   "scripts": {
     ...
     "unittest": "mocha --recursive ./test/unit/*.js",
     ...
   }

测试文件(test.js)结构

describe("Section1", function() {
  beforeEach(async function() {
    await configureTestEnv();

    // TODO: set "prefs" module
    // TODO: set "io" module
    // TODO: set "info" module
  });

  describe("subscriptions", function() {
    it("throws if no condition is achieved", async function() {
   ...

疑问

不涉及core包的测试可以正常运行,说明测试框架本身没问题。我不想引入webpack、babel这类额外依赖或中间构建步骤,能不能通过向Mocha传递模块目录路径的方式,让Node.js找到我写的prefs模块?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:21:32