Unit-тестирование¶
Unit-тестирование (англ. unit testing) — это проверка корректности работы отдельных частей приложения в изолированной среде независимо друг от друга.
На практике unit-тесты пишутся для сложных функций, чтобы запускать их при внесении изменений в исходный код проекта с целью выявления регрессионных ошибок.
Регрессионная ошибка — ошибка, которая возникает в работе функции, при внесении изменений в другой части приложения.
Для unit-тестирования в Angular приложениях используется фреймворк Jasmine.
Созданное с помощью Angular CLI новое приложение по умолчанию устанавливает все инструменты, необходимые для unit-тестирования, и уже содержит тест для компонента AppComponent
. Для его запуска из директории проекта выполните:
1 |
|
Команда собирает приложение в режиме отслеживания изменений и запускает все имеющиеся тесты. Файлы тестов должны быть названы в формате *.spec.ts
. При создании элементов через Angular CLI эти файлы тестов создаются по умолчанию автоматически.
Запуск в режиме отслеживания изменений означает, что при любом изменении исходного кода проекта тесты будут запускаться автоматически.
После выполнения команды ng test
запустится браузер, в окне которого будет представлен результат тестирования. Отчет о тестировании также дублируется в консоль.
Рассмотрим структуру теста. Откройте файл /src/app/app.component.spec.ts
для наглядности.
Общая структура теста:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Сперва импортируются зависимости. В Angular unit testing это всегда элементы библиотеки @angular/core/testing
и сущности, для которых пишется тест.
Далее описываются сами тесты.
Функция describe()
объединяет в себе группу взаимосвязанных тестов. Первым параметром она принимает текстовое описание группы, вторым — функцию, которая содержит конфигурацию и набор тестов.
Общепринято объединять в группу тесты, относящиеся к одному компоненту, сервису и т. д., а саму группу называть именем компонента, сервиса и т. д.
1 2 3 |
|
В describe()
сам тест описывается функцией it()
. Она также принимает в качестве параметров текстовое описание и функцию, в которой описана вся логика.
Проверка результата выполнения осуществляется с помощью функции expect()
, принимающей итоговое значение, в связке с одной из функций соответствия
1 2 3 4 5 6 |
|
Функция beforeEach()
используется для задания исходного состояния и вызывается перед каждой функцией it()
. Например, перед запуском каждого теста необходимо создать экземпляр класса тестируемого компонента, и чтобы не делать это в каждой функции it()
, можно использовать beforeEach()
.
1 2 3 4 5 |
|