Angular 2 - MockBackend - 相当于Passtrough?

时间:2016-09-12 09:44:56

标签: angular mocking backend

我需要在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 ????
  }
});

有没有办法告诉模拟后端在某些情况下播放“真实”的电话?

1 个答案:

答案 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