私は知っている、TypeScriptは1日古い。しかし、ここにある種のユニットテストフレームワークがあるのか、それともTypeScriptのユニットテストを作成して実行する方法があるのか、私は興味がありますか?
TypeScriptはJavaScriptにコンパイルでき、そのJavaScriptのテストを作成できますが、それは私が望んでいることではありません。
私は知っている、TypeScriptは1日古い。しかし、ここにある種のユニットテストフレームワークがあるのか、それともTypeScriptのユニットテストを作成して実行する方法があるのか、私は興味がありますか?
TypeScriptはJavaScriptにコンパイルでき、そのJavaScriptのテストを作成できますが、それは私が望んでいることではありません。
TypeScriptはランタイム言語ではありません。TypeScriptコードを実行するには、最初にそれをJavaScriptにコンパイルする必要があります。同じことがテストにも当てはまります。テストはTypeScriptでも可能で、JavaScriptにコンパイルし、お気に入りのテストフレームワークを使用してテストを実行できます。
既存の JavaScript 単体テスト フレームワークのいずれかを使用して、TypeScript または JavaScript で単体テストを作成できます。
すぐに、既存のフレームワークが TypeScript のアンビエント定義ファイル (更新 - http://Definitivelytyped.org/を持っている) を取得し、TypeScript に関する限り静的に型付けされるようになると思います。それまでの間、Ambient Declarations を読んで、テストの開始時に独自のものをいくつか追加する必要があるかもしれません。
または、TypeScriptで記述された単体テスト フレームワークであるtsUnit TypeScript Unit Testing Frameworkを使用することもできます。そのため、TypeScript でうまく機能します (また、JavaScript でも使用できます)。
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.');
}
});