ОБНОВЛЕНИЕ: есть более новая версия этого сообщения с более подробной информацией и решениями. Лучше отправиться туда. Содержание этого сообщения может быть устаревшим, и опубликованные здесь решения могут больше не работать.

TypeScript - это то, от чего я без ума, и недавно я начал проект на TypeScript, который требовал тестов. В этом посте я объясню, как настроить простую настройку, при которой наши тесты также могут быть написаны на TypeScript, при этом мы можем использовать наш синтаксис импорта TypeScript и иметь вывод типа, помогающий во всем, что мы делаем.

У нас есть множество инструментов и фреймворков для тестирования JavaScript, например мокко, жасмин и т. Д. В основном это участники тестов BDD / TDD. Они могут использовать собственную библиотеку assert узла или другие внешние библиотеки утверждений, такие как chai. В моей текущей реализации я выбрал mocha и chai - просто потому, что с ними было легко начать работать в TypeScript так, как я хотел. Я попробовал Жасмин, но мне не удалось заставить его работать так, как я хотел - в основном потому, что мне не хватало ноу-хау. Если бы кто-то мог помочь с настройкой Jasmine, это было бы здорово.

ПРИМЕЧАНИЕ. Это кроссплатформенный код, поэтому везде, где вы видите в коде символ $, не забудьте использовать свой терминал, который может быть Терминалом на Mac или Shell в Ubuntu / Linux и CommandPrompt / PowerShell в Windows.

Установка зависимостей разработки

Мы собираемся использовать mocha в качестве нашей среды тестирования или средства выполнения тестов и chai в качестве нашей библиотеки утверждений. Мы будем использовать другой пакет под названием ts-node, чтобы помочь нам писать наши тесты на TypeScript. Мы будем устанавливать их глобально, а также в качестве зависимостей разработки:

Установка определений типов

Прежде чем писать наши тесты на TypeScript, лучше всего иметь эти надоедливые аннотации типов для наших библиотек / фреймворков для тестирования и утверждений, верно? Давайте использовать для этого типизацию, хотя, возможно, вы уже используете ее, если уже разрабатываете с помощью TypeScript. Это менеджер определения типа, который помогает с утверждениями типа TypeScript. Если он у нас не установлен, давайте установим его сейчас:

Теперь, когда у нас установлены типы, приступим к настройке с необходимыми определениями типов. Мы будем включать mocha как глобальный модуль (мы можем использовать его без операторов импорта) и chai как зависимость (нам нужно импортировать его в наши тесты). Мы будем устанавливать определения типов для mocha из DefinentyTyped, репозитория для определений типов, в то время как мы будем использовать реестр npm Для chai:

РЕДАКТИРОВАТЬ: теперь существует еще один метод добавления определений типов из TypeScript 2.0, поэтому мы также можем использовать его вместо метода типизации, упомянутого выше. Этот метод не зависит от пакета или модуля npm typings. Чтобы использовать это, введите следующие команды:

Написание нашего первого теста TypeScript

Чтобы объяснить тест, позвольте мне написать базовую функцию приветствия. Мне просто нужна функция для тестирования, поэтому я просто собираюсь создать функцию, которая при вызове возвращает «Hello World!» в виде строки.

Давайте напишем тест на TypeScript, теперь, когда у нас есть функция для тестирования:

Проведение наших тестов

Давайте воспользуемся npm test для запуска наших тестов. Нам просто нужно подключить его к mocha и ts-node. Добавьте в свой package.json следующий скрипт:

Мы только что зарегистрировали ts-node с mocha, а последний параметр указывает, что mocha должен запускать тесты в src папка с названием test.ts. Не стесняйтесь изменять это в соответствии с вашими проектами.

Вот пример результата теста:

Что вы думаете?

Это сработало для вас? Помогает ли наличие определений типов в ваших тестах?
Могу ли я сделать что-нибудь лучше?
Я что-то упустил?

Поделитесь своими мыслями в комментариях к этому сообщению. Также дайте мне знать, есть ли какие-то вещи, которые вам хотелось бы прочитать дальше.

Ваше здоровье!

Если вам понравилось читать, не забудьте порекомендовать и поделиться - спасибо!