Автоматизация тестирования в Angular базируется на использовании
встроенного фреймворка TestBed и инструментов для
юнит-тестирования и энд-ту-энд тестов (Karma,
Jasmine, Protractor).
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 }
]
});
Для проверки взаимодействия компонентов в реальных условиях применяются энд-ту-энд тесты через 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 позволяет запускать тесты автоматически при каждом коммите, что обеспечивает стабильность приложения и предотвращает регрессии.