2016-07-24 4 views
0

Typescriptで自分のペットプロジェクトのユニットテストを設定するのが苦労しています。Typescript:unit tests and dependencies

/src 
    /test 
     unittest.ts 
     unittest.html 
    main.ts 

main.tsディレクトリ構造次の点を考慮

class Point { 
    constructor(public x: number, public y: number) { 
    } 
} 
export { Point }; 

unittest.ts

import Point from "../main"; 

function basicTest() { 
    let Point = new Point(10, 15); 
    // ... 
} 

basicTest(); 

unittest.html

<html> 
    <meta charset="UTF-8"> 
    <head></head> 
    <body> 
    <script src="unittest.js" charset="utf-8"></script> 
    </body> 
</html> 

した後、私はエラー ReferenceError: require is not defined以下を参照してくださいtsc src/test/unittest.ts && open src/test/unittests.html

このコードをコンパイルします。

私はunittest.htmlにrequirejsを追加しようとしましたが、それはあいまいなエラーに繋がります。また、コンパイル中に--module system--module amdを使用しようとしましたが、成功しませんでした。

私はいくつかの依存関係を欠場しましたか?

ありがとうございます!あなたのテストでのインポート行が何かのようにダウンコンパイルします

答えて

0

この場合には依存関係を解決する最も簡単な方法は、 browserifyを使用しているようだと、それはプラグインtsifyです:

browserify src/test/unittest.ts -p [ tsify --debug ] > src/test/unittest.js 
2

...

var foo_1 = require("./foo"); 

ザ・文を設定する必要があります必要があります。 Javascriptには、モジュールをロードしてすぐにモジュールを読み込むことはできません。いくつかの方法があります。彼らは、「どのようにモジュールがそれを求めてロードするのか」という点では、すべて異なるアプローチです。

  • CommonJS(レガシーノード/バックエンドのメカニズム)
  • AMD(レガシーブラウザ/フロントエンドのメカニズム)
  • :私はあなたがJavaScriptでさまざまなモジュール解決メカニズムのいくつかの研究を行うが、4つの主要なアプローチが存在してもらおう
  • グローバル(最古のブラウザアプローチではrequireを使用していません。<script>タグを使用してHTML内の依存ライブラリを参照するだけです)
  • (これらのアプローチのすべてを統合する新しいメカニズム)

これが新しいプロジェクトの場合は、おそらくES2015スタイルをサポートするツールが必要です。 RequireJSは、AMDモジュールのローディングをサポートするためのツールです。一般的なアプローチであるWebpackやSystemJSを調べたいと思うかもしれません。私は主にSystemJSで働いています。 SystemJSを手作業で設定したくないのですが、それを行うjspmを使うことをお勧めします。スタートガイドhereがあります。

ウェブパックを見たい場合は、hereを起動できます。

+0

最も簡単な方法は何ですか?私は単体テストがたくさんあるとは思わないので、あまりにも多くの時間を費やして設定したくありません。 – mdrndv

+0

これは単体テストと、アプリケーションの使用についてのことではありません。 main.tsは他のライブラリをインポートしますか?もしそうなら、あなたは何かを理解する必要があります。私はこれまでwebpackを使用していないので、私はそれに話すことができません。 jspmの使い始めるには時間がかかりません。一度始めると、再構築と再起動が非常にシームレスになります。 – Pace

+0

ありがとう!私は外部ライブラリを使用する予定はありません(私は 'npm'を使って物事を整理しています)、できるだけクリーンで最小限のプロジェクトを維持したいと考えています。プロジェクトをモジュール化しておくためには、機械が必要です。 – mdrndv