Unittesting в TypeScript
Я знаю, TypeScript - один день. Но мне любопытно, есть ли здесь какая-то структура unit test или способ написания и запуска модульных тестов для TypeScript?
TypeScript может быть скомпилирован в JavaScript, и я могу написать тест для этого JavaScript, но это не то, что я хочу.
Ответы
Ответ 1
TypeScript не является языком выполнения. Чтобы выполнить ваш код TypeScript, вам сначала нужно скомпилировать его на JavaScript; это также относится к тестированию.
Кроме того, ваши тесты могут быть в TypeScript, скомпилировать как в JavaScript, так и использовать вашу любимую тестовую среду для выполнения тестов.
Ответ 2
Вы можете написать модульные тесты в TypeScript или JavaScript, используя любую из существующих инфраструктур тестирования модулей JavaScript.
Очень скоро я представляю, что существующие фреймворки получат файлы определения окружающей среды TypeScript (обновление - они имеют: http://definitelytyped.org/), которые сделают их статически напечатаны до TypeScript. Тем временем вам может потребоваться прочитать информацию об объявлении об окружающей среде и добавить несколько своих собственных в начале ваших тестов.
В качестве альтернативы вы можете использовать tsUnit TypeScript Unit Testing Framework, которая представляет собой единую тестовую платформу, написанную в TypeScript, - поэтому она воспроизводит nice с TypeScript (и может использоваться и в JavaScript).
Ответ 3
Кажется, есть еще один тестовый runner/framework, называемый 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.');
}
});