【发布时间】:2018-05-19 18:50:52
【问题描述】:
我正在尝试将 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 typerequire('~/someModule')`。
问题
我的问题是,它们不能一起工作。如果我有someModule,那取决于someDependency:
// src/someModule.js
const someDependency = require('~/src/someDependency');
doSomethingWith(someDependency);
然后我想用someDependency 的模拟版本测试someModule,我应该可以做到:
const proxiedSomeModule =
proxyquire('~/src/someModule', {
'~/src/someDependency': fakeVersionOfSomeDependency
});
...但是proxyquire 告诉我`错误:找不到模块'~/src/someModule'。
大概(“幕后”)Babel 正在将 '~/src/someModule' 转换为其真实路径,因此当 Proxyquire 查找别名路径时它找不到它。
问题
我的问题是:在 Babel 转换它之后(即当 proxyquire 处理它时),有什么方法可以找出 '~/src/someModule' 的真实路径是什么?或者有什么方法可以让 proxyquire 只使用别名路径?
【问题讨论】:
标签: babeljs proxyquire