web-dev-qa-db-ja.com

TypeScriptでのユニットテスト

TypeScriptは1日前のものです。しかし、私はここに何らかの種類の単体テストフレームワークがあるのか​​、TypeScriptの単体テストを作成して実行する方法がありますか?

TypeScriptはJavaScriptにコンパイルでき、そのJavaScriptのテストを作成できますが、それは私が望むものではありません。

37
MicTech

TypeScriptはランタイム言語ではありません。 TypeScriptコードを実行するには、まずJavaScriptにコンパイルする必要があります。同じことがテストにも当てはまります。テストはTypeScriptでも実行でき、JavaScriptにコンパイルし、好みのテストフレームワークを使用してテストを実行できます。

20
mohamed hegazy

既存のJavaScript単体テストフレームワークを使用して、TypeScriptまたはJavaScriptで単体テストを作成できます。

すぐに、既存のフレームワークがTypeScriptアンビエント定義ファイルを取得することを想像します(更新-それらは http://definitelytyped.org/ )。これにより、TypeScriptに関する限り静的に型付けされます。それまでの間、環境宣言を読んで、テストの開始時に独自のコードをいくつか追加する必要があるかもしれません。

あるいは、 tsUnit TypeScript Unit Testing Framework を使用できます。これは、TypeScriptで記述された単体テストフレームワークです。TypeScriptでナイスに再生できます(JavaScriptでも使用できます)。

16
Fenton

Internと呼ばれる別のテストランナー/フレームワークがあるようです。 https://theintern.github.io/

TypeScriptと組み合わせて使用​​する方法を説明する記事を次に示します。 https://www.sitepen.com/blog/2015/03/24/testing-TypeScript-with-intern/

TypeScriptを使用していて、ソースマップをサポートする単体テストのセットアップを探している場合、かなり有望に見えます。

テスト例:

import registerSuite = require('intern!object');
import assert = require('intern/chai!assert');
// Assume that we now have a version of our model in TypeScript:
import SimpleTodoModel = require('todo/model/SimpleTodoModel');

registerSuite({
    name: 'SimpleTodoModel',
    // Assume we have a promises interface defined
    'default data'() {
        var emptyModel = new SimpleTodoModel(),
            id:string = emptyModel.get('id'),
            length:number = emptyModel.get('todos').length,
            incomplete:number = emptyModel.get('incomplete'),
            complete:number = emptyModel.get('complete');
        assert.strictEqual(id, 'todos-dojo',
                    'Id should default to "todos-dojo"');
        assert.strictEqual(length, 0,
                    'Todos array should default to an empty array.');
        assert.strictEqual(incomplete, 0,
                    'Incomplete count should default to 0.');
        assert.strictEqual(complete, 0,
                    'Incomplete count should default to 0.');
    }
});