2016-07-22 10 views
3

ich diesen Dienst haben muss ich Test:Wie MockBackend in Angular2 verwenden

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 

@Injectable() 
export class LoginService { 

    private baseUrl: string = 'http://localhost:4000/'; 

    constructor (private http: Http) {} 

    public getBaseUrl() { 
    return this.baseUrl; 
    } 

    getLogin() { 
    return this.http.get(this.baseUrl + 'api/auth/octopus') 
     .map(res => res.json().redirect); 
    } 
} 

die getlogin() Funktion testen Ich habe diesen Code:

import { 
    async, 
    describe, 
    it, 
    expect, 
    beforeEach, 
    addProviders, 
    inject 
} from '@angular/core/testing'; 
import { provide} from '@angular/core'; 
import { LoginService } from './login.service'; 
import { 
    Http, 
    BaseRequestOptions, 
} from '@angular/http'; 
import {MockBackend} from '@angular/http/testing'; 


describe('Service: LoginService',() => { 

    beforeEach(() => addProviders([ 
    LoginService, 
    BaseRequestOptions, 
    MockBackend, 
    provide(Http, { 
     useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => { 
     return new Http(backend, defaultOptions); 
     }, 
     deps: [MockBackend, BaseRequestOptions] 
    }) 
    ])); 

    it('should return data.', 
    async(inject([LoginService], (loginService: LoginService) => { 
     loginService.getLogin().subscribe(
     data => console.log(data) 
    ); 
    }) 
)); 

}); 

jedoch die Daten doesn‘ Ich werde nicht eingeloggt. Ich habe verschiedene Lösungen ausprobiert, die ich auf SO oder im Internet gefunden habe.

Einer von ihnen war, einen HTTP-Aufruf an das Mockbackend zu machen, aber das gab mir nur Daten = undefiniert.

Antwort

3

Sie müssen MockBackend injizieren und für die Verbindung abonnieren, wie folgt aus:

UPDATE

async(inject([LoginService, MockBackend], (loginService: LoginService, mockBackend:MockBackend) => { 
    let mockResponse = new Response(new ResponseOptions({body: {'redirect': 'some string'}})) 
    mockBackend.connections.subscribe(c => c.mockRespond(mockResponse)); 
    loginService.getLogin().subscribe(
    data => console.log(data) 
); 
}) 

Für weitere Informationen gehen Sie hier:

https://angular.io/docs/ts/latest/api/http/testing/index/MockBackend-class.html

+0

dies gibt mir: Unerwarteter token y in JSON an Position 0 –

+0

ok, ändere einfach '' youData'' string in einen json, syth li ke, dass: '{'Redirect': 'eine Zeichenfolge'}' –

+0

es funktioniert, danke! –

Verwandte Themen