2017-10-06 3 views
4

Ich benutzte HttpModule, um Ajax-Aufruf zu feuern und hatte ein Mockup-Backend, um jede Anfrage im Front-End zu entwickeln. Jetzt benutze ich HttpClientModule, weil ich die Interceptor-Funktion verwenden möchte. Aber meine Mockup-Backend-Basis auf Http funktioniert nicht. Wie kann ich mein Mockup-Backend ändern, damit es den Aufruf von HttpCleint abfängt.Angular 4.3 HttpClient mit MockBackend

fake-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); 
} 

Antwort

-1

In Ihrem Test, den Sie verwenden Http, nicht die HttpClientModule, ohnehin zu fälschen Antwort von dem Httpclient in einem Test eines Dienstes, ist dies, wie ich stelle es auf den 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(); 
}); 
Verwandte Themen