2017-12-06 18 views
0

Babel의 "module-alias"플러그인을 "proxyquire"테스트 라이브러리와 함께 사용하려하지만 많은 행운이 없습니다.Babel Plugin 모듈 별칭은 실제로 어떤 경로입니까?

도서관 스토리

당신과 같이 테스트를 위해 모듈의 의존성을 조롱

Proxyquire가하자 (당신이 두 모듈 별칭/proxyquire에 익숙하다면 넘어가 셔도됩니다) :

const someFunctionToTest = 
    proxyquire(pathToSomeFunctionToTestsModule, { 
    pathToDependency: fakeVersionOfDependency 
    }); 

바벨의 모듈 별칭 플러그인을 사용하면 가져 오기 경로를보다 편리하고 일관되게 만들 수 있습니다. 예를 들어, 내가 (.babelrc에서) 지정할 수 있습니다 대신에 (세 개의 디렉토리 깊은 중첩 된 모듈에서 가져올 때)을 입력 할 필요없이 다음

"plugins": [ 
    ["module-alias", [ 
    { "src": "./", "expose": "~" } 
    ]], 

require('../../../someModule') I can just type 필요 ('~/someModule') '.

문제는 내 문제가

, 그들은 함께 작동하지 않습니다.

// src/someModule.js 
const someDependency = require('~/src/someDependency'); 
doSomethingWith(someDependency); 

를하고 난 할 수 있어야 someDependency의 모의 버전 someModule을 테스트하려는 : 내가 someModule이있는 경우 someDependency에 따라 달라집니다

const proxiedSomeModule = 
    proxyquire('~/src/someModule', { 
    '~/src/someDependency': fakeVersionOfSomeDependency 
    }); 
...하지만 proxyquire 알려줍니다 me`오류 : '~/src/someModule'모듈을 찾을 수 없습니다.

Babel은 '~/src/someModule'을 실제 경로로 변환하므로 Proxyquire가 별칭이 지정된 경로를 찾을 때 찾을 수 없습니다.

내 질문입니다 질문 : 알아낼 수있는 방법이 무엇인지 그것으로 '~/SRC/someModule'이며, 바벨 변환 후 (즉, 때 proxyquire 거래의 실제 경로.)? 또는 별칭이 지정된 경로로 프록시 키를 사용하는 방법이 있습니까?

답변

0

모듈 리졸버에 의해 생성 된 "실제"경로 ('~/someModule'의 경우)는 단지 ../../someModule 경로입니다. 그러나 경로를 손으로 변환 할 필요가 없다는 것도 밝혀졌습니다.

모듈 해석기 플러그인은 인수를 transformFunctions 목록의 함수로 변환합니다. 즉, 다음을 수행하여 문자열을 비 앨리어스 형식으로 변환 할 수 있습니다.

  1. 간단한 패스 스루 기능을 정의하십시오.const resolveModulePath = path => path;
  2. .babelrctransformFunctions리스트 (proxyquire 함께) 그 기능을 추가

    [ "모듈 확인자"{
        "transformFunctions"[ "proxyquire", "resolveModulePath"]
    }] resolveModulePath와 함수의 인수하지

  3. 랩 어떤 경로 :

    PR oxyquire ('~/일부/경로/someModule'{
        [resolveModulePath ('~/일부/기타/경로')] {
            된 SomeFuncion : fakeSomeFunction
       }
    })

위의 첫 번째 경로는 변환 된 함수에 대한 인수로 이스케이프 할 필요가 없습니다. 인수 인 객체의 일부이므로 두 번째 경로 ('~/some/other/path') 만 래핑해야합니다. 랩핑 될 때까지 문자열 자체는 인수가 아닙니다.

자세한 내용은 https://github.com/tleunen/babel-plugin-module-resolver/issues/241#issuecomment-350109168