2016-07-20 9 views
3

Ich habe folgendes Service in meiner Angular Anwendung:Wie kann ich diesen Angular 2-Dienst testen?

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

@Injectable() 
export class BookService { 

    constructor(private http: Http) {} 

    getList() { 
    return this.http.get('/api/books.json'); 
    } 
} 

Wie würde ich die getList() Funktion zu testen?

Ich brauche nicht jedes Detail, nur ein paar allgemeine Richtung. Ich nehme an, das ist ziemlich abgefahrenes Gebiet, aber ich habe Probleme, eine Dokumentation darüber zu finden, wie Leute normalerweise so etwas testen. Sobald ich die Richtung kenne, in die ich gehen kann, kann ich die Details wahrscheinlich selbst verfolgen.

Antwort

1

ich damit einige mehr auf meinem eigenen um verwirrte. Hier ist, was ich kam mit für den Test selbst:

it('should assign a list of books', inject([BookService, MockBackend, Http], (bookService, backend, http) => { 
    backend.connections.subscribe(connection => { 
     var mockResponse = new Response(new ResponseOptions({ 
     body: [{ name: 'Whiteboard Interviews' }] 
     })); 
     connection.mockRespond(mockResponse); 
    }); 

    let service = new BookService(http); 
    service.getList().subscribe(response => { 
     expect(response.json()).toEqual([{ name: 'Whiteboard Interviews' }]); 
    }); 
    })); 

Und hier ist die volle spec-Datei:

/* tslint:disable:no-unused-variable */ 

import { provide } from '@angular/core'; 
import { MockBackend } from '@angular/http/testing'; 

import { 
    Http, 
    HTTP_PROVIDERS, 
    Response, 
    ResponseOptions, 
    BaseRequestOptions, 
    ConnectionBackend 
} from '@angular/http'; 

import { 
    beforeEach, beforeEachProviders, 
    describe, xdescribe, 
    expect, it, xit, 
    async, inject 
} from '@angular/core/testing'; 

import { BookService } from './book.service'; 

describe('Book Service',() => { 
    beforeEachProviders(() => [ 
    BookService, 
    HTTP_PROVIDERS, 
    MockBackend, 
    BaseRequestOptions, 
    provide(Http, { 
     useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) { 
     return new Http(backend, defaultOptions); 
     }, 
     deps: [MockBackend, BaseRequestOptions] 
    }) 
    ]); 

    it('should ...', 
     inject([BookService], (service: BookService) => { 
    expect(service).toBeTruthy(); 
    })); 

    it('should assign a list of books', inject([BookService, MockBackend, Http], (bookService, backend, http) => { 
    backend.connections.subscribe(connection => { 
     var mockResponse = new Response(new ResponseOptions({ 
     body: [{ name: 'Whiteboard Interviews' }] 
     })); 
     connection.mockRespond(mockResponse); 
    }); 

    let service = new BookService(http); 
    service.getList().subscribe(response => { 
     expect(response.json()).toEqual([{ name: 'Whiteboard Interviews' }]); 
    }); 
    })); 
}); 
3
import {addProviders, inject} from '@angular/core/testing'; 

describe('my code',() => { 
    beforeEach(() => { 
    addProviders([ 
     BookService, 
     HTTP_PROVIDERS, 
     MockBackend, 
     {provide: XHRBackend, useExiting: MockBackend}]); 
    }); 

    it('does stuff', inject([BookService], (service) => { 
    // actual test 
    }); 
}); 

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

+0

Danke für die Antwort. Ich denke, das hilft, etwas Licht in das Thema zu bringen, obwohl der Teil, an dem ich mehr interessiert war, was _inside_ das 'it' geht. Ich habe eine separate Frage erstellt, die beschreibt, was ich gerade versuche. Vielleicht könnten wir die Lösung in diese Antwort einfügen, sobald das erledigt ist. http://stackoverflow.com/questions/38484765/angular-2-mock-response-not-working –