我有一个mocha测试来测试我的代码。我的代码使用另一个“核心”npm包(它使用CommonJS模块)。其中一个“核心”文件(“synchronizer.js”文件)require
的“prefs”模块假定在某个时候提供:
const {Prefs} = require("prefs");
在mocha测试中,我想实现这个“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一样使用smth,但我希望保持干净,如果可能的话,不使用任何deps或中间构建步骤。
我是否应该将模块目录路径传递给mocha,让node.js以某种方式找到它?
1条答案
按热度按时间webghufk1#
最后使用webpack并生成了一个包含
prefs
的模块。