Jasmine — фреймворк для написания модульных тестов в
JavaScript и TypeScript. Он предоставляет декларативный синтаксис для
описания тестов, ожиданий (expect) и шпионов
(spy) для отслеживания вызовов функций.
describe() — группирует тесты по логике или
компоненту.it() — отдельный тестовый сценарий.beforeEach() и afterEach() — функции
подготовки и очистки перед и после каждого теста.expect() — утверждение, проверяющее результат
выполнения кода.Пример теста для компонента Angular:
describe('AppComponent', () => {
let component: AppComponent;
beforeEach(() => {
component = new AppComponent();
});
it('should have title "Angular App"', () => {
expect(component.title).toBe('Angular App');
});
it('should increment counter', () => {
component.increment();
expect(component.counter).toBe(1);
});
});
Шпионы позволяют проверять вызовы функций и параметры:
spyOn(component, 'increment');
component.increment();
expect(component.increment).toHaveBeenCalled();
Можно возвращать произвольные значения:
spyOn(service, 'getData').and.returnValue(of([1, 2, 3]));
Karma интегрируется с Jasmine и обеспечивает выполнение тестов в браузере или headless-режиме. Основные параметры конфигурации:
frameworks — подключаемые фреймворки, например,
['jasmine'].browsers — список браузеров для запуска тестов
(ChromeHeadless, Firefox).files — файлы тестов и исходного кода.reporters — способ отображения результатов
(progress, dots).Пример запуска Karma:
ng test
Команда автоматически компилирует проект, запускает Karma и выводит результаты тестирования в консоль.
Angular CLI упрощает использование Jasmine и Karma:
ng generate component) создаёт файл
.spec.ts.ng test.coverage) для анализа
тестируемости компонентов и сервисов.Jasmine и Karma обеспечивают полный цикл тестирования в Angular, от написания модульных тестов до автоматического запуска в CI/CD. Правильное использование шпионов и временных функций анимаций позволяет создавать стабильные, предсказуемые и легко тестируемые пользовательские интерфейсы.