我有以下 Angular 2 测试:
/* tslint:disable:no-unused-variable */
import { provide } from '@angular/core';
import { MockBackend } from '@angular/http/testing';
import {
Http,
HTTP_PROVIDERS,
Response,
ResponseOptions,
BaseRequestOptions,
ConnectionBackend,
XHRBackend
} 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: XHRBackend, useExiting: MockBackend },
provide(Http, {
useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
return new Http(backend, defaultOptions);
},
deps: [MockBackend, BaseRequestOptions]
})
]);
it('should assign a list of books', inject([BookService, MockBackend, Http], (service, backend, http) => {
var response;
backend.connections.subscribe(c => {
expect(c.request.url).toEqual('/api/books.json');
c.mockRespond(new Response(new ResponseOptions({body: {message: 'thank you'}})));
});
http.get('/api/books.json').subscribe(data => response = data);
expect(response).toEqual({ message: 'thank you' });
}));
});
我想重点关注的部分是:
it('should assign a list of books', inject([BookService, MockBackend, Http], (service, backend, http) => {
var response;
backend.connections.subscribe(c => {
expect(c.request.url).toEqual('/api/books.json');
c.mockRespond(new Response(new ResponseOptions({body: {message: 'thank you'}})));
});
http.get('/api/books.json').subscribe(data => response = data);
expect(response).toEqual({ message: 'thank you' });
}));
当我运行测试时,我得到:
Expected Response with status: null null for URL: null to equal Object({ message: 'thank you' }).
认为这可能是一个异步问题,我将我的期望更改为:
http.get('/api/books.json').subscribe(data => {
expect(data).toEqual({ message: 'thank you' });
});
但我仍然收到同样的失败消息。
我该怎么做才能使模拟响应生效?