Je suis assez nouveau pour Angular4 et j'ai besoin d'écrire des tests unitaires pour un simple service que j'ai construit, mais je ne sais pas par où commencer.Angular4 - comment tester un service
Le service consiste simplement à insérer un appel api comme suit:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/map';
import { KeyValuePair } from '../../models/keyvaluepair';
import { environment } from './../../../environments/environment';
// Lookups api wrapper class.
@Injectable()
export class LookupsService {
private servicegApiUrl = '';
public constructor(private http : HttpClient) {
// Build the service api url, uring the environment lookups api url, plus controller name to reference.
this.servicegApiUrl = environment.webApiUrl + 'Lookups/';
}
// Get the hubs from the web api.
public getHubs() : Observable<KeyValuePair<number>[]> {
// Carry out http get and map the result to the KeyValuePair number object.
return this.http.get<KeyValuePair<number>[]>(this.servicegApiUrl + 'Hubs').map(res => { return res; });
}
}
J'ai besoin de tester mes méthode getHubs() et ne sais pas comment. En outre, j'ai vu divers articles en ligne sur le test d'un service et je ne suis pas sûr si je dois me moquer des résultats attendus ou si cela devrait effectivement appeler le service Web. J'ai ce code, mais le attends ne semble jamais exécuté:
import { TestBed, async, inject } from '@angular/core/testing';
import { HttpClientModule, HttpRequest, HttpParams } from '@angular/common/http';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { LookupsService } from './Lookups.Service';
import { KeyValuePair } from './../../models/KeyValuePair';
describe(`LookupsService tests`,() => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,
HttpClientTestingModule
],
providers: [
LookupsService
]
});
});
it(`should get results from the web method`, async(inject([ LookupsService, HttpTestingController ],
(service: LookupsService, backend: HttpTestingController) => {
service.getHubs().subscribe((hubs : KeyValuePair<number>[]) => {
// This code never seems to run...
console.log(hubs.length);
expect(hubs.length).toBeGreaterThan(0);
});
})));
});
Pour la classe complet KeyValuePair ressemble à ceci:
export class KeyValuePair<T> {
Key : string;
Value : T;
}
Toute aide très appréciée!
Ok cool - donc le meilleur pour tester quand ne dépend pas de l'API réel. Donc, je me suis moqué de faire des appels réels. Quelqu'un at-il de bons exemples de tester un service avec HttpClient comme une dépendance avec des résultats moqués? –
Vous pouvez toujours essayer d'utiliser 'spyOn' pour espionner une méthode. Vérifiez cette réponse SO pour l'utilisation: https://stackoverflow.com/questions/30658525/spy-on-a-service-method-call-using-jasmine-spies – eminlala