Автоматизация тестирования

Автоматизация тестирования в Angular базируется на использовании встроенного фреймворка TestBed и инструментов для юнит-тестирования и энд-ту-энд тестов (Karma, Jasmine, Protractor).

TestBed

TestBed предоставляет контекст для создания компонентов, инъекции сервисов и модульной конфигурации для тестов.

Пример настройки теста компонента:

import { TestBed, ComponentFixture } from '@angular/core/testing';
import { BoxComponent } from './box.component';

describe('BoxComponent', () => {
  let component: BoxComponent;
  let fixture: ComponentFixture<BoxComponent>;

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [ BoxComponent ]
    }).compileComponents();

    fixture = TestBed.createComponent(BoxComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

Моки и стабы сервисов

Для изоляции компонентов используются поддельные сервисы (stubs) или моки. Это позволяет тестировать компоненты без зависимости от реальной логики сервиса или сетевых запросов.

class MockDataService {
  getData() { return of(['item1', 'item2']); }
}

TestBed.configureTestingModule({
  providers: [
    { provide: DataService, useClass: MockDataService }
  ]
});

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

Для проверки взаимодействия компонентов в реальных условиях применяются энд-ту-энд тесты через Protractor или Cypress. Основная идея — имитировать действия пользователя и проверять корректность отображения интерфейса.

Пример проверки кнопки:

it('should navigate to details page on click', async () => {
  await element(by.css('.details-btn')).click();
  expect(await browser.getCurrentUrl()).toContain('/details');
});

Автоматизация сборки и запуска тестов

Для регулярного тестирования используют скрипты в package.json:

"scripts": {
  "test": "ng test --watch=false --browsers=ChromeHeadless",
  "e2e": "ng e2e"
}

Интеграция с CI/CD позволяет запускать тесты автоматически при каждом коммите, что обеспечивает стабильность приложения и предотвращает регрессии.