NodeJS 如何在摩卡测试中提供测试ESModule实现?

hyrbngr7  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(147)

我有一个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以某种方式找到它?

webghufk

webghufk1#

最后使用webpack并生成了一个包含prefs的模块。

相关问题