2017-08-10 6 views
8

HttpからHttpClientに切り替える前に、私はMockBackedを使用してバックエンドレスセットアップを行っていました。私はのように見えたモックbackend.provider.tsというファイルを持っていた:新しいHttpClientで角度4のバックエンドレス開発

import { 
    Http, BaseRequestOptions, Response, ResponseOptions, 
    RequestMethod, XHRBackend, RequestOptions 
} from '@angular/http'; 
import { MockBackend, MockConnection } from '@angular/http/testing'; 

import { subscribers } from '../jsons/subscribers.json'; 
import { TokenService } from '../../authentication/token.service'; 

export function mockBackendFactory(backend: MockBackend, options: BaseRequestOptions, 
    realBackend: XHRBackend) { 

    // configure fake backend 
    backend.connections.subscribe((connection: MockConnection) => { 
     // wrap in timeout to simulate server api call 
     setTimeout(() => { 
      let url = connection.request.url; 
      let method = connection.request.method; 

       if (url.endsWith('/demographic/subscriber') && method === RequestMethod.Get) { 
     let tokenService: TokenService = new TokenService(); 

     // get username from token 
     let username = tokenService.getUsername(); 

     // find if any subscriber matches login credentials 
     let filteredSubscriber = subscribers.filter(subscriber => { 
      return subscriber.username === username; 
     }); 

     // check to see if the user exists 
     if (filteredSubscriber.length) { 
      let subscriber = filteredSubscriber[0]; 
      connection.mockRespond(new Response(new ResponseOptions({ 
       status: 200, 
       body: { 
        "subscriber": { 
         "id": subscriber.id, 
         "firstName": subscriber.firstName, 
         "lastName": subscriber.lastName, 
         "username": subscriber.username, 
         "preferredEmail": subscriber.preferredEmail 
        } 
       } 
      }))); 
     } else { 
      // else return 400 bad request 
      connection.mockError(new Error('Unauthorized')); 
     } 

     return; 

     }, 500); 

    }); 

    return new Http(backend, options); 
} 

export let MockBackendProvider = { 
    provide: Http, 
    useFactory: mockBackendFactory, 
    deps: [MockBackend, BaseRequestOptions, XHRBackend] 
}; 

を、私のcore.module.tsファイルに私が「プロバイダ」セクションにMockBackendProviderを置きます。

これは私に非常に迅速にjson応答をモックアップさせることができ、環境変数に基づいてこのプロバイダを切り替えるようにセットアップしました。

私はHttpClientを使用して切り替えると、バックエンドを取るHttpHandlerを使用するため、バックエンドパラメータを直接使用しなくなりましたが、MockBackendを受け入れることができません。

私は現在の設定がHttpClientを使用して実行できるとは思っていませんが、私はそれで大丈夫ですが、新しいモジュールでバックエンドレスフローを設定する方法はわかりません。

すべてのヘルプは非常に高く評価されます! もっとコードが必要な場合は教えてください。

+1

こんにちはショーン:

私はこの作業を持っているか見たい人のための例を嘲笑していますか?私はテストでそれを行う方法のためのリソースしか見つけられませんでしたが、それをバックエンドにする方法は見つかりませんでした。理想的には、環境、開発モック、バックエンド開発の間で切り替えるために '環境'設定を使いたいと思っています。 – skofgar

+1

@skofgar私は答えとして自分の解決策を投稿しました。私の例をチェックしてください。私はセットアップで何か質問にお答えしてうれしく思います。 –

+0

ありがとうShawn!私は傍受者も見始めましたが、あなたが行った限りではそれほど得られませんでした。あなたのソリューションを提供してくれてありがとう! – skofgar

答えて

関連する問題