我正在尝试将 Babel 的“module-alias”插件与“proxyquire”测试库一起使用,但我运气不佳。
图书馆背景故事
(如果您熟悉模块别名/代理查询,请随意跳过)
Proxyquire 让您模拟一个模块的依赖项以进行测试,如下所示:
const someFunctionToTest =
proxyquire(pathToSomeFunctionToTestsModule, {
pathToDependency: fakeVersionOfDependency
});
Babel 的 module-alias 插件让你的导入路径更加方便和一致。例如,我可以指定(在 .babelrc 中):
"plugins": [
["module-alias", [
{ "src": "./", "expose": "~" }
]],
然后不必键入(从嵌套三个目录深度的模块导入时)require('../../../someModule') I can just type
require('~/someModule')`。
问题
我的问题是,它们不能一起工作。如果我有someModule
这取决于someDependency
:
// src/someModule.js
const someDependency = require('~/src/someDependency');
doSomethingWith(someDependency);
然后我想someModule
用模拟版本进行测试someDependency
,我应该能够做到:
const proxiedSomeModule =
proxyquire('~/src/someModule', {
'~/src/someDependency': fakeVersionOfSomeDependency
});
...但proxyquire
告诉我'错误:找不到模块'~/src/someModule'。
大概(“幕后”)Babel 正在将 '~/src/someModule' 转换为其真实路径,因此当 Proxyquire 查找别名路径时它找不到它。
问题
我的问题是:在 Babel 转换它之后(即当 proxyquire 处理它时),有什么方法可以找出 '~/src/someModule' 的真实路径是什么?或者,有什么方法可以让 proxyquire 只使用别名路径?