如何在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
相关产品推荐
相关产品推荐

