2017-05-01 10 views
0

私は次のように区切られたソースコードとテストを持っている:テストをmochaおよびts-nodeとは別のディレクトリに配置していますか?

`src/main/ts/hello.ts` //SOURCE FILES HERE 
`src/test/ts/hello.spec.ts` //SPEC FILES HERE 

src/test/ts/hello.spec.tsでimport文は次のようになります。

import hello from 'hello'; 

hello.tsソースコードは次のようになります。

export function hello() { 
     return 'Hello World!'; 
    } 

    export default hello; 

私のtsconfig.jsonは、テストファイルが相対paを使わずにソースモジュールをインポートできるように設定されていますこのようなTHS:

{ 
     "include": [ 
     "src/main/ts/**/*.ts" 
     ], 
     "exclude": [ 
     "node_modules" 
     ], 

     "compilerOptions": { 
     "experimentalDecorators": true, 
     "noImplicitAny": true, 
     "moduleResolution": "node", 
     "target": "es6", 
     "baseUrl": ".", 
     "paths": { 
      "*": [ 
      "*", "src/main/ts/*" 
      ] 
     } 
     } 
    } 

hello.spec.tsファイルは、私はこのようなモカとtsnodeを実行するように設定npm testでテストを実行しようとしているimport hello from 'hello';

ステートメントを使用してhelloをインポートすることができますこの方法(this articleに基づきます) :

"scripts": { 
    "test": "mocha -r ts-node/register src/test/ts" 
}, 

しかし、私はこのエラーを取得するようTS-ノードが私のtsconfig.json構成に拾っているようには見えません。

あなたは tsconfig.jsonpathsを介して設定さ

mocha -r ts-node/register src/test/ts

Error: Cannot find module 'hello' 
    at Function.Module._resolveFilename (module.js:336:15) 
    at Function.Module._load (module.js:286:25) 

答えて

1

モジュールの分解能は、純粋にコンパイル時の事です。このコードは、どのようにコードが発行されるかには影響しません。つまり、テストファイルがノードが解決できないrequire("hello")を実行していることを意味します(詳細はts-nodeissue reportおよびこのタイプスクリプトissue reportを参照してください)。 pathsがコンパイル時に発生することは、モジュールローダーをに設定し、と同じ種類の解像度をtsconfig.jsonで実行する必要があることです。たとえば、RequireJSを使用していた場合は、同じものをpathstsconfig.json)に設定する必要があります。しかし、ノードを使用しています...

ノードでできることはtsconfig-pathsです。これはtsconfig.jsonとなり、pathsの設定を解析し、ノードのモジュール解像度を変更して動作させます。私はtsconfig-paths@types/mochaは(import "mocha"は、コンパイル単位のテストファイルで正しいことないように、私は上記を示してインストール

import hello from "hello"; 
import "mocha"; 

it("q",() => { 
    if (hello() !== "Hello World!") { 
     throw new Error("unequal"); 
    } 
}); 

はあなたのコードを使用して、私はフィードバックのための少なくとも1つのテストを持っているhello.spec.tsを修正しました)と、このようにモカを呼び出した:私はこの出力を得た

$ ./node_modules/.bin/mocha --compilers ts:ts-node/register -r tsconfig-paths/register 'src/test/ts/**/*.ts' 

✓ q 

    1 passing (20ms) 
関連する問題