Перейти к содержанию

Unit-тестирование

Unit-тестирование (англ. unit testing) — это проверка корректности работы отдельных частей приложения в изолированной среде независимо друг от друга.

На практике unit-тесты пишутся для сложных функций, чтобы запускать их при внесении изменений в исходный код проекта с целью выявления регрессионных ошибок.

Регрессионная ошибка — ошибка, которая возникает в работе функции, при внесении изменений в другой части приложения.

Для unit-тестирования в Angular приложениях используется фреймворк Jasmine.

Созданное с помощью Angular CLI новое приложение по умолчанию устанавливает все инструменты, необходимые для unit-тестирования, и уже содержит тест для компонента AppComponent. Для его запуска из директории проекта выполните:

1
ng test

Команда собирает приложение в режиме отслеживания изменений и запускает все имеющиеся тесты. Файлы тестов должны быть названы в формате *.spec.ts. При создании элементов через Angular CLI эти файлы тестов создаются по умолчанию автоматически.

Запуск в режиме отслеживания изменений означает, что при любом изменении исходного кода проекта тесты будут запускаться автоматически.

После выполнения команды ng test запустится браузер, в окне которого будет представлен результат тестирования. Отчет о тестировании также дублируется в консоль.

Рассмотрим структуру теста. Откройте файл /src/app/app.component.spec.ts для наглядности.

Общая структура теста:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import {...} from '...';
...

describe('related tests group', () => {
    beforeEach(() => {...});

    it('test description', async(() => {
        expect(...).toBe(...);
    }));

    ...
});

Сперва импортируются зависимости. В Angular unit testing это всегда элементы библиотеки @angular/core/testing и сущности, для которых пишется тест.

Далее описываются сами тесты.

Функция describe() объединяет в себе группу взаимосвязанных тестов. Первым параметром она принимает текстовое описание группы, вторым — функцию, которая содержит конфигурацию и набор тестов.

Общепринято объединять в группу тесты, относящиеся к одному компоненту, сервису и т. д., а саму группу называть именем компонента, сервиса и т. д.

1
2
3
describe('AppComponent', () => {
    //
});

В describe() сам тест описывается функцией it(). Она также принимает в качестве параметров текстовое описание и функцию, в которой описана вся логика.

Проверка результата выполнения осуществляется с помощью функции expect(), принимающей итоговое значение, в связке с одной из функций соответствия

1
2
3
4
5
6
it('expect example', () => {
    let a = 5;
    a = a + 7;

    expect(a).toBe(12);
});

Функция beforeEach() используется для задания исходного состояния и вызывается перед каждой функцией it(). Например, перед запуском каждого теста необходимо создать экземпляр класса тестируемого компонента, и чтобы не делать это в каждой функции it(), можно использовать beforeEach().

1
2
3
4
5
beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [AppComponent],
    }).compileComponents();
}));

Комментарии