Я пытаюсь использовать подключаемый модуль Babel «module-alias» с библиотекой тестирования «proxyquire», но мне не очень повезло.
История библиотеки
(можно пропустить, если вы знакомы с псевдонимом модуля/proxyquire)
Proxyquire позволяет смоделировать зависимости модуля для тестирования, например:
const someFunctionToTest =
proxyquire(pathToSomeFunctionToTestsModule, {
pathToDependency: fakeVersionOfDependency
});
Плагин Babel для псевдонимов модулей позволяет сделать ваши пути импорта более удобными и согласованными. Например, я могу указать (в .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 ищет путь с псевдонимом, он не может его найти.
Вопрос
Мой вопрос: есть ли способ узнать, каков реальный путь '~/src/someModule' после его преобразования Babel (т.е. когда с ним работает proxyquire)? Или, в качестве альтернативы, есть ли способ заставить proxyquire работать только с псевдонимами путей?