2017-10-06 3 views
4

J'avais l'habitude d'utiliser HttpModule pour déclencher l'appel ajax et j'avais un backend mockup pour attraper toutes les requêtes dans le frontend pour le développement. Maintenant j'utilise HttpClientModule parce que je veux utiliser la fonction d'intercepteur. Mais ma base de base de maquette sur Http ne fonctionne pas. Comment puis-je modifier mon backend mockup pour qu'il attrape l'appel de HttpCleint.Angular 4.3 HttpClient avec MockBackend

faux-backend.ts

import { Http, BaseRequestOptions, Response, ResponseOptions, RequestMethod } from '@angular/http'; 
import { MockBackend, MockConnection } from '@angular/http/testing'; 
import { environment } from '../../environments/environment'; 

export function fakeBackendFactory(backend: MockBackend, options: 
BaseRequestOptions) { 
    // configure fake backend 
    backend.connections.subscribe((connection: MockConnection) => { 
    let testUser = { username: 'test', password: 'test', firstName: 'Test', lastName: 'User' }; 

    // wrap in timeout to simulate server api call 
    setTimeout(() => { 

     // 
     if (connection.request.url.includes('/daquery/ws/setup') && connection.request.method === RequestMethod.Get) { 
     ... 
    } 

    return new Http(backend, options); 
} 

Répondre

-1

Dans votre test, vous utilisez Http, pas le HttpClientModule, de toute façon à la réponse fausse de la httpclient dans un test d'un service, voilà comment je mettre en place le test.

import {TestBed, getTestBed} from '@angular/core/testing'; 
import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; 


beforeEach(() => { 
    TestBed.configureTestingModule({ 
    imports: [HttpClientTestingModule], 
    providers: [AuthService] 
    }); 

    authService = TestBed.get(AuthService); 
    httpMock = TestBed.get(HttpTestingController); 
}); 

it('should return user and token successfully at login', (done) => { 
    const credentials = {userName: 'bob', password: '123'} as LoginPayload; 
    const httpResponse = {user: user, token: '123'} as LoginSuccessPayload; 

    authService.login(credentials).subscribe(res => { 
    expect(res).toEqual(httpResponse); 
    done(); 
    }); 

    const loginRequest = httpMock.expectOne('/api/auth/signin'); 
    loginRequest.flush(httpResponse); 

    expect(loginRequest).toBeDefined(); 
    expect(loginRequest.request.method).toEqual('POST'); 

    httpMock.verify(); 
});