2016-07-20 3 views
3

私は角度のアプリケーションで次のサービスがあります。このAngular 2サービスをテストするにはどうすればよいですか?

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

どのように私はgetList()機能をテストするのでしょうか?

私はすべての最後の細部は、ちょうど一般的な方向を必要としません。私はこれがかなりよく磨耗した領域だと思うが、私は人々が通常このようなことをテストする方法についての文書を見つけるのが難しい。私が行く方向を知ったら、おそらく自分自身の詳細を追うことができます。詳細については

答えて

1

を参照してください。ここでは、私がテスト自体のために思い付いたものです:

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' }]); 
    }); 
    })); 

そしてここで、フルスペックのファイルです:答えを

/* 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 
    }); 
}); 

私は自分自身にいくつかのより多くのそれを周りめちゃめちゃhttps://angular.io/docs/ts/latest/api/http/testing/MockBackend-class.html

+0

おかげで。私は、これは、私が、それが何であるかに興味を持っていましたが、これはテーマに関するいくつかの光を放つのに役立つと思います。私は現在何をしようとしているのかを記述した別の質問を作成しました。たぶん、それが整理されたら私たちはこの答えにソリューションをスプライスすることができました。 http://stackoverflow.com/questions/38484765/angular-2-mock-response-not-working –

関連する問題