提问人:Jay 提问时间:11/10/2023 更新时间:11/15/2023 访问量:26
无法模拟 ESM 模块 mocha 中导入的函数
Can't mock imported function in ESM Modules mocha
问:
因此,我一直在尝试为使用对 DB、redis 等进行外部调用的文件模拟导入函数。因此,我只能隔离使用该函数的类的方法。
在生产中,我们使用的是 Node v14,假设没有办法更新应用程序的版本。
因此,我需要做的是:
// Imported function
export const functionToBeReplaced = () => {};
// Class that I am trying to write unit tests for
import {functionToBeReplaced} from 'a/long/path/to/function';
Class A {
testMethod(...args) {
// Some business logic to test
// result of method should be passed here
functionToBeReplaced(result);
// Some other business logic
return someOtherResult;
}
}
我尝试过使用 esmock 等库,但由于我们使用的是 NodeJS 14 版本,因此会抛出错误
export const mockedClass = await esmock('a/path/to/class', {
'a/long/path/to/function': {
functionToBeReplaced() {
},
},
}, {});
The requested module 'node:module' does not provide an export named 'isBuiltin'
似乎唯一的解决方法是将 NodeJS 版本提升到 16,但由于其他一些错误,我们不能只升级版本
此外,我还尝试使用诸如proxyquire之类的库,但是由于我们在package.json中指定了proxyquire,因此实际上并不想与ESM一起使用type: module
我们使用 mocha 作为测试框架,并带有这些启动选项
mocha --config=./.mocharc-dev.json --exit --es-module-specifier-resolution=node --experimental-modules src/**/*.test.js
.mocharc-dev.json
{
"diff": true,
"extension": [
"js"
],
"package": "./package.json",
"slow": 75,
"timeout": 20000,
"ui": "bdd",
"recursive": true,
"exit": true,
"env" : "dotenv_config_path=./.dev-env",
"require": "dotenv/config"
}
有没有其他方法可以使用 NodeJS v14 和 mocha 模拟 ESM 模块中导入的函数?
答: 暂无答案
上一个:Mocha:测试找不到模块
下一个:模拟Redis,但找不到结果
评论