我需要在Angular 2应用程序中动态启用一些后端“实时模拟”,以获取某些动态条件下的特定URL(这不是单元测试!)。
在角度1中,我曾经使用正则表达式启用模拟,并使用相同名称的方法让其他请求“通过”。
但在角度2中,我坚持使用以下代码:
this.backend.connections.subscribe((c: MockConnection) => {
// ...
if ( regexp.test(c.request.url) && c.request.method === 0) {
c.mockRespond(...);
} else {
// WHERE IS MY c.passThrough() method ????
}
});
有没有办法告诉模拟后端在某些情况下播放“真实”的电话?
答案 0 :(得分:2)
您可以通过将真实的XHRBackend作为依赖项包含在您的虚假后端提供程序中,然后使用真实的后端向服务器执行任何未模拟的URL的http请求,如下所示:
import { Http, BaseRequestOptions, Response, ResponseOptions, RequestMethod, XHRBackend } from '@angular/http';
import { MockBackend, MockConnection } from '@angular/http/testing';
export let fakeBackendProvider = {
// use fake backend in place of Http service for backend-less development
provide: Http,
useFactory: (backend: MockBackend, options: BaseRequestOptions, realBackend: XHRBackend) => {
// array in local storage for registered users
let users: any[] = JSON.parse(localStorage.getItem('users')) || [];
// configure fake backend
backend.connections.subscribe((connection: MockConnection) => {
// wrap in timeout to simulate server api call
setTimeout(() => {
// mocked urls handled here ...
// pass through any requests not handled above
let realHttp = new Http(realBackend, options);
realHttp.get(connection.request.url).subscribe((response: Response) => { connection.mockRespond(response); });
}, 500);
});
return new Http(backend, options);
},
deps: [MockBackend, BaseRequestOptions, XHRBackend]
};
有关详细信息和演示
,请参阅this post