Concept Flow - Mocking services in tests
Test Setup
Create Mock Service
Inject Mock into Component
Run Test
Verify Behavior
Test Pass/Fail
This flow shows how a mock service replaces a real service in tests to control behavior and verify outcomes.
import { TestBed } from '@angular/core/testing'; import { MyComponent } from './my.component'; import { DataService } from './data.service'; const mockDataService = { getData: () => ['mock', 'data'] }; TestBed.configureTestingModule({ providers: [{ provide: DataService, useValue: mockDataService }] });
| Step | Action | Service Used | Component Behavior | Test Outcome |
|---|---|---|---|---|
| 1 | TestBed configures testing module | Mock service created | Component will use mock service | Setup ready |
| 2 | Component created and injected | Mock service injected | Component calls getData() on mock | Mock data returned ['mock', 'data'] |
| 3 | Component processes data | Mock service data used | Component displays or uses mock data | Behavior controlled by mock |
| 4 | Assertions run | Mock service data verified | Test checks expected output from mock data | Test passes if output matches |
| 5 | Test completes | Mock service only used | No real service calls made | Test isolated and reliable |
| Variable | Start | After Setup | After Injection | After Data Call | Final |
|---|---|---|---|---|---|
| dataService | undefined | mockDataService object | mockDataService object | mockDataService.getData() returns ['mock', 'data'] | mockDataService object |
| componentData | undefined | undefined | undefined | ['mock', 'data'] | ['mock', 'data'] |
Mocking services in Angular tests: - Use TestBed to replace real service with mock via provide/useValue - Mock controls data returned to component - Component uses mock service during test - Assertions verify behavior based on mock data - Ensures isolated, predictable tests