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"
あなたは正しいですが、 'map.'が' person.service.ts'にインポートされたので、なぜ私は '人物にインポートする必要があるのか分かりません。 service.spec.ts' ... – nuvio
私もそうではありません。散発的にも私に起こります: - /私はそれを幸せにするためにインポートします。私は確かに説明(と解決)があると確信していますが、私はちょうど与えることにしました。 –