Ez a szint azt jelenti, hogy nemcsak egyszerű függvényeket tudsz tesztelni, hanem egy Angular service-t is, mockolod a függőségeit, és Jasmine + Karma segítségével futtatod és értelmezed az eredményeket.
✅ Példa: Service teszt mockolt függőséggel
Tegyük fel, van egy UserService, ami a HttpClient-et használja:
user.service.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class UserService {
constructor(private http: HttpClient) {}
getUser(id: string): Observable<{ name: string }> {
return this.http.get<{ name: string }>(`/api/users/${id}`);
}
}
🧪 Teszt mockolt HttpClient-tel
user.service.spec.ts
import { TestBed } from '@angular/core/testing';
import { HttpClient } from '@angular/common/http';
import { of } from 'rxjs';
import { UserService } from './user.service';
describe('UserService', () => {
let service: UserService;
let mockHttp: jasmine.SpyObj<HttpClient>;
beforeEach(() => {
mockHttp = jasmine.createSpyObj<HttpClient>('HttpClient', ['get']);
TestBed.configureTestingModule({
providers: [
UserService,
{ provide: HttpClient, useValue: mockHttp }
]
});
service = TestBed.inject(UserService);
});
it('should return user data from API', (done) => {
const mockResponse = { name: 'Gábor' };
mockHttp.get.and.returnValue(of(mockResponse));
service.getUser('123').subscribe((user) => {
expect(user).toEqual(mockResponse);
done();
});
expect(mockHttp.get).toHaveBeenCalledWith('/api/users/123');
});
});
💡 Mit tanúsít ez a szint?
✅ Tudod:
| Képesség | Mit jelent |
|---|---|
| Service-t tesztelni | Nem UI komponenst, hanem logikai osztályt |
| Mockolni egy függőséget | HttpClient, Router, más service |
| SpyObj | jasmine.createSpyObj() használata |
| Jasmine szintaxis | describe, it, expect, toHaveBeenCalledWith |
| Aszinkron kezelés | .subscribe(), done() |
| Karma futtatás | ng test parancs és a böngészős futtatás értelmezése |
Ha szeretnéd, adok példát interceptor, guard, vagy form-validáló service tesztelésére is.