2017-05-13 8 views
0

私は、名前空間を広範囲に使用するフレームワーク内にTypescriptコードを書いています。Node.jsの名前空間を使用するTypescriptコードはどのようにテストしますか?

私はモジュールとして組み込むことになるmochaのようなテストランナーを使用して、いくつかの単体テストを追加したいと思います。既存のファイルはすべて名前空間で記述されているため、モジュールとしてテストにインポートすることはできません。

/// <reference path=.../>を使用できますが、参照されるクラスは実際にはコンパイル済みのjsファイルでは定義されません。

--outFileを使ってみましたが、システムローダーとしてsystemjsを使用する必要がありました。私はこれをやってみましたが、私は実行すると:

mocha --compilers ts:ts-node/register api-test.ts 

私はエラーを取得:私は手動でテストコードをコンパイルするtscを実行すると

ReferenceError: System is not defined 

を、私はSystem.registerへの呼び出しを参照していますが、システムのISN実際にファイルにインポート/必要があります。

私が見つけた最も近い例は、このレポです:https://github.com/curran/jspm-mocha-example

それはバベルの代わりに、活字体を使用していますが、正常モカとsystemjsを使用することができるようだ、と私はロードする明示的なコードが表示されませんシステムライブラリ。

アップデート:私はモカへ-r systemjsオプションを追加しようとした@martinから

。これはSystemを追加し、参照エラーを解決しました。しかし、次の問題は、Typescriptコンパイラtscによって生成されたコードが、モジュール読み込みコード内でテストコードをラップすることになります。モカは今テストを見つけることができないようです。

System.register("tests/foo-test", ["config.js", "assert"], function (exports_1, context_1) { 
    "use strict"; 
    var __moduleName = context_1 && context_1.id; 
    var assert; 
    return { 
     setters: [ 
      function (_1) { 
      }, 
      function (assert_1) { 
       assert = assert_1; 
      } 
     ], 
     execute: function() { 
      describe('testCase', function() { 
       it('type test', function() { 
        assert(false); 
       }); 
      }); 
     } 
    }; 
}); 
+0

@martin -rフラグは役立ちますが、Typescriptコンパイラはmochaからテストを隠しています。 – dragonx

答えて

0

形態

import 'path/to/namespace'; 

SystemJS https://github.com/systemjs/systemjs#nodejs具体

に記載されるように文書を引用する標準モジュールとしてロードすることができる使用し、そのようなコードをインポートする:

ラン

npm install systemjs 

これをテストファイルの先頭に追加します。

var SystemJS = require('systemjs'); 

// loads './app.js' from the current directory 
SystemJS.import('./app.js').then(function (m) { 
    console.log(m); 
}); 

あなたは自動的に、ロードtranspile、とに指定された解像度のセマンティクスを使用してNodeJS下のターゲット・モジュールを実行しますどの

npm install [email protected] 

あなたはまた、jspm run moduleを使用することができ、特にベータ枝をJSPMを使用している場合ローカルjspm.config.jsファイル。

0

--outFileを使用しているTypeScriptでは、AMDおよびSystemJSモジュール形式でのみサポートされているすべてのソースファイルから「バンドル」を作成しましょう。通常、テストを実行するときは、これをやりたくはありません。単一のテストを実行する場合は、バンドル全体をコンパイルする必要があるからです。私もmochaは、バンドルから単一のモジュールをインポートし、それだけを実行できるとは思わない。とにかく

mochaは、テストを実行する前jsファイルが必要です-rhttps://mochajs.org/#r---require-module-name)のパラメータを持っています。私はこれが直接node_moduleディレクトリからSystemJSをインポートすることで動作するかどうかわからない、またはモジュールが使用できるようにSystemJSだけを必要とする "ブートストラップ" jsファイルを作成する必要があります。

関連する問題