2016-09-12 16 views
2

いくつかの動的条件で、特定のURLに対してAngular 2アプリケーションでバックエンドの「ライブモック」を動的に有効にする必要があります(これは単体テストではありません)。角2 - MockBackend - パススルー相当ですか?

アングル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 ???? 
    } 
}); 

は、いくつかの状況では、「本当の」のコールを再生するためにモックバックエンドを伝える方法はありますか?あなたがこれを行うことができます

答えて

2

は、このような任意のunmocked URLのサーバーにHTTPリクエストを実行するために、実際のバックエンドを使用して、その後、あなたの偽のバックエンドプロバイダへの依存関係として本当のXHRBackend含むことにより、次のとおりです。

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を参照してください。

+0

投稿を参照してください。 – hugsbrugs

関連する問題