Jasmine и Karma

Jasmine — фреймворк для написания модульных тестов в JavaScript и TypeScript. Он предоставляет декларативный синтаксис для описания тестов, ожиданий (expect) и шпионов (spy) для отслеживания вызовов функций.

Основные конструкции Jasmine

  • 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);
  });
});

Шпионы (Spies)

Шпионы позволяют проверять вызовы функций и параметры:

spyOn(component, 'increment');
component.increment();
expect(component.increment).toHaveBeenCalled();

Можно возвращать произвольные значения:

spyOn(service, 'getData').and.returnValue(of([1, 2, 3]));

Karma — тестовый раннер

Karma интегрируется с Jasmine и обеспечивает выполнение тестов в браузере или headless-режиме. Основные параметры конфигурации:

  • frameworks — подключаемые фреймворки, например, ['jasmine'].
  • browsers — список браузеров для запуска тестов (ChromeHeadless, Firefox).
  • files — файлы тестов и исходного кода.
  • reporters — способ отображения результатов (progress, dots).

Пример запуска Karma:

ng test

Команда автоматически компилирует проект, запускает Karma и выводит результаты тестирования в консоль.

Интеграция с Angular CLI

Angular CLI упрощает использование Jasmine и Karma:

  • Генерация тестов при создании компонентов (ng generate component) создаёт файл .spec.ts.
  • Тесты запускаются командой ng test.
  • Возможна настройка покрытия кода (coverage) для анализа тестируемости компонентов и сервисов.

Jasmine и Karma обеспечивают полный цикл тестирования в Angular, от написания модульных тестов до автоматического запуска в CI/CD. Правильное использование шпионов и временных функций анимаций позволяет создавать стабильные, предсказуемые и легко тестируемые пользовательские интерфейсы.