2016-10-20 24 views
3

Angular2のテストについては、バージョンの違いなどにより、さまざまな情報源がオンラインで混乱しています。 getPersons方法がどのように見える与えUnitTest Mock Httpレスポンス(Angular2(2.1.0)サービス)

import { TestBed, async, inject } from '@angular/core/testing'; 
import { PersonService } from '../services/person.service'; 
import { Person} from '../models/Person'; 
import { MOCK_DATA_PERSON } from '../test/mocks/mock-data-person'; 

// HTTP mocking imports 
import { Http, BaseRequestOptions, Response, HttpModule, ResponseOptions } from '@angular/http'; 
import { MockBackend, MockConnection } from '@angular/http/testing'; 


describe('PersonService',() => { 
    beforeEach(async(() => { 
     TestBed.configureTestingModule({ 
      providers: [ 
       PersonService, 
       MockBackend, 
       BaseRequestOptions, 
       { 
        provide: Http, 
        useFactory: (backend: MockBackend, options: BaseRequestOptions) => { 
         return new Http(backend, options); 
        }, 
        deps: [MockBackend, BaseRequestOptions], 
       } 
      ], 
      imports: [ 
       HttpModule 
      ] 
     }); 

     TestBed.compileComponents(); 
    })); 

    it('returns a list of persons', async(inject([MockBackend, PersonService], (backend: MockBackend, service) => { 

     backend.connections.subscribe(
      (connection: MockConnection) => { 
       connection.mockRespond(new Response(
        new ResponseOptions({ 
         body: JSON.stringify({name: "Bob", surname : "Jones"}) 
        }))); 
      }); 

     service.getPersons() 
      .subscribe(persons=> { 
       expect(persons.length).toBeDefined(); 
       expect(persons.length).toBe(1); 
      }).catch(error => console.log(error)); 
    }))); 


}); 

:私は最終2.1.0角度使用していると私は以下の私のサービス・テスト・クラスのための単純なHTTP応答を模擬する方法を理解していない

getPersons(): Observable<Person[]> { 
    return this.http.get(this.getAllUrl) 
     .map(res.json().data) 
     .catch(this.handleError); 
    } 

私はエラーが発生しました"Failed: this.http.get(...).map is not a function"

答えて

2

テストは良いですが、Observable.map演算子は見つかりませんでした。

import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 
+0

あなたは正しいですが、 'map.'が' person.service.ts'にインポートされたので、なぜ私は '人物にインポートする必要があるのか​​分かりません。 service.spec.ts' ... – nuvio

+1

私もそうではありません。散発的にも私に起こります: - /私はそれを幸せにするためにインポートします。私は確かに説明(と解決)があると確信していますが、私はちょうど与えることにしました。 –

関連する問題