Je suis nouveau dans les tests Karma/Jasmine et j'essaie de mettre en place un test pour mon service qui effectue une requête GET. J'utilise le XHRBackend avec un objet MockBackend pour simuler de fausses requêtes et réponses. J'ai un "webService" qui exécute la requête GET et un "authService" qui contient la chaîne de connexion et le jeton d'accès. J'ai configuré ce test comme suit :
describe('WebService Tests', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [HttpModule],
providers: [
AuthService,
AdalService,
WebServicesService,
{ provide: XHRBackend, useClass: MockBackend }
]
})
.compileComponents();
}));
beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
backend = be;
authService = new AuthService(new AdalService(), http);
webService = new WebServicesService(http, authService);
fakeWebServicesData = makeServicesData;
let webOptions = new ResponseOptions({status: 200, body: {data: fakeWebServicesData}})
webResponse = new Response(webOptions);
}));
it('should have expected successful GET of WebServices', async(inject([], () => {
backend.connections.subscribe((c: MockConnection) => c.mockRespond(webResponse));
webService.getWebServices().toPromise()
.then(data => {
expect(data.length).toBe(fakeWebServicesData.length,
'should have received all web services data');
})
})))
La réponse que je reçois est un échec car data.length est indéfini, alors qu'il devait être égal à 1 (les données fictives que j'utilise sont de longueur 1). Je ne sais pas trop pourquoi cela se produit. La méthode appelée est la suivante :
getWebServices(): Observable<WebService[]> {
let connection = this.authService.connection + '/services';
// Add authorization header with jwt token
let token = this.authService.getToken();
let headers = new Headers({ 'Authorization': 'Bearer ' + token });
let options = new RequestOptions({ headers: headers });
// Get services from web service api endpoint
return this.http.get(connection, options)
.map((response: Response) => response.json())
.catch((error: Response) => {
return Observable.throw(error);
});
}
Je pense qu'étant donné que je ne me suis pas encore connecté au service d'authentification avant d'effectuer la requête fictive, il est possible que celle-ci renvoie une valeur non définie. Dois-je me connecter avec mon service d'authentification avant de créer cette requête fictive ? (Si oui, comment puis-je effectuer deux requêtes fictives à la suite dans le même test ? Ou y a-t-il une autre façon de simuler l'authentification ? Toute aide serait appréciée. Merci beaucoup.
UPDATE : Voici mes fausses données
const makeServicesData = [
{
name: "service1", version: "1.0.0", versionPublishedBy: "",
creationTime: "", snapshotId: "", runtimeType: "",
initCode: "", code: "", description: "", operationId: "",
inputParameterDefinitions: [
{ name: "", type: "" }
],
outputParameterDefinitions: [
{ name: "", type: "" }
],
outputFileNames: [""],
myPermissionOnService: "read/write"
}
]