Service Unit Test, Mocking, Jasmine, Karma

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égMit jelent
Service-t tesztelniNem UI komponenst, hanem logikai osztályt
Mockolni egy függőségetHttpClient, Router, más service
SpyObjjasmine.createSpyObj() használata
Jasmine szintaxisdescribe, it, expect, toHaveBeenCalledWith
Aszinkron kezelés.subscribe(), done()
Karma futtatásng 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.

Was this page helpful?