Jus*_*sef 12 angularjs angular2-testing angular
任何人都可以帮我在Angular 2中测试Http请求.我有一个服务从两个http请求获取流.我如何在测试中模拟这种行为?
loadData() {
return Observable.forkJoin(
this.http.get('file1.json').map((res:Response) => res.json()),
this.http.get('file2.json').map((res:Response) => res.json())
).map(data => {
return {
x: data[0],
y: data[1]
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码,我试图使用一个连接数组,但我收到一条错误消息"失败:连接已经解决".我已将连接体留空,以避免暴露敏感数据.
describe('Test Load Init Data', () => {
it('should load Menu Zones and Menu Sections',
inject([XHRBackend, AppInitService], (mockBackend, appInitService) => {
console.log('Lets do some testing');
//first we register a mock response
mockBackend.connections.subscribe(
(connection:MockConnection) => {
return [
connection.mockRespond(new Response(
new ResponseOptions({
body: []
})
)),
connection.mockRespond(new Response(
new ResponseOptions({
body: []
})
))
];
});
appInitService.loadData().subscribe(data => {
expect(data.x.length).toBeGreaterThan(0);
expect(data.y.length).toBeGreaterThan(0);
});
}));
});
Run Code Online (Sandbox Code Playgroud)
Dav*_*oho 17
我对一系列请求有类似的问题.但首先是你的问题.
var responses = {};
responses['data1.json'] = new Response(new ResponseOptions({body: 'data1'}));
responses['data2.json'] = new Response(new ResponseOptions({body: 'data2'}));
backend.connections.subscribe(connection => {
var response = responses[connection.request.url];
connection.mockRespond(response);
});
http.request('data2.json').subscribe(res => expect(res.text()).toBe('data2'));
http.request('data1.json').subscribe(res => expect(res.text()).toBe('data1'));
Run Code Online (Sandbox Code Playgroud)
var responses = [];
responses.push(new Response(new ResponseOptions({body: '1st'})));
responses.push(new Response(new ResponseOptions({body: '2nd'})));
backend.connections.subscribe(connection => {
var response = responses.shift();
connection.mockRespond(response);
});
http.request('data.json').subscribe(res => expect(res.text()).toBe('1st'));
http.request('data.json').subscribe(res => expect(res.text()).toBe('2nd'));
Run Code Online (Sandbox Code Playgroud)
我的实现是在javascript中,但应该很容易移植到打字稿测试.
实际上,您需要在订阅的回调中仅模拟一个响应,但根据请求URL,返回的响应可能不同:
mockBackend.connections.subscribe(
(connection: MockConnection) => {
if (connection.request.url === 'file1.json') {
connection.mockRespond(new Response(
new ResponseOptions({
body: ['some message']
})));
} else {
connection.mockRespond(new Response(
new ResponseOptions({
body: ['some other message']
})));
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3920 次 |
| 最近记录: |