0 Tage Serie
javascript / intermediate
Snippet

Injektion von Mock-Service-Unterklassen in Komponenten-Testumgebungen

Angular-Unit-Tests können echte Service-Abhängigkeiten überschreiben, indem abgeleitete Mock-Klassen über `useClass` in `TestBed.configureTestingModule` bereitgestellt werden.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { TestBed } from '@angular/core/testing';
import { ProfileComponent } from './profile.component';
import { UserDataService } from './user-data.service';
class MockUserDataService extends UserDataService {
override fetchUserPermissions(): string[] {
return ['READ', 'WRITE'];
}
}
describe('ProfileComponent DI Hierarchy', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [ProfileComponent],
providers: [{ provide: UserDataService, useClass: MockUserDataService }]
}).compileComponents();
});
it('instantiates the component with overridden service behavior', () => {
const fixture = TestBed.createComponent(ProfileComponent);
expect(fixture.componentInstance).toBeTruthy();
});
});
angular
Erklärung
1
class MockUserDataService extends UserDataService {
Erbt vom Basis-Service, um eine isolierte Mock-Implementierung mit überschriebenen Methoden zu erstellen.
2
providers: [{ provide: UserDataService, useClass: MockUserDataService }]
Registriert die Mock-Klasse als Ersatz-Token im Test-Dependency-Injection-Container.
3
const fixture = TestBed.createComponent(ProfileComponent);
Erstellt eine Komponenteninstanz, die an den gemockten Dependency-Baum gebunden ist.