2017-09-12 10 views
0

私はPARAMとAPI呼び出しがあります。異なるパラメータに基づいて異なるモックを返す方法は?

public getPersonName(id: number): Observable<Person> { 
    let searchParams: URLSearchParams = new URLSearchParams(); 
    searchParams.append("id", id.toString()); 
    // my http call is down here ... 
    } 

を、私のモックは次のようになります。

public handleRequest(connection: MockConnection): void { 

    let request: Request = connection.request; 

    // Used in Expedite 
    if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url)) { 
     setTimeout(() => { 
     connection.mockRespond(new Response(
      new ResponseOptions({ 
      status: 200, 
      headers: new Headers(MY_HEADERS), 
      body: { 
       "fname": "John", 
       "lname": "Deer", 
       "age": 25 
      } 
      }) 
     )); 
     }, 1000); 
    } 
    } 

が、私がしたいことは、IDに応じて異なるJSONを返すように実際にある...ので、 idが5325なら1つのjsonの結果を返したい、idが4545の場合は別のjsonを返す。

どうすればよいですか?

ありがとう@!

答えて

0

handleRequestの機能がmockBackend.connections.subscribe()に渡されているものとします。

この場合、RxJSの力を使ってここで手伝ってください。
発信された接続をフィルタリングし、それらに返信することができます。

ボーナスとして、setTimeoutを使用する必要はありません。これは、RxJSでは遅延演算子も提供されるためです。現在の構造に簡単な解決策が見つかり

mockBackend.connections 
    .filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/123') 
    .delay(1000) 
    .subscribe(conn => { 
    // Respond for person 123 
    conn.mockRespond({}); 
    }); 

mockBackend.connections 
    .filter(({ request }) => request.method === RequestMethod.Get && request.url === '/person/456') 
    .delay(1000) 
    .subscribe(conn => { 
    // Respond for person 456 
    conn.mockRespond({}); 
    }); 
+0

をおかげで偉大な答えを充てる、あなたは私のモックの現在の構造を維持するソリューションを与えることができますtheresのチャンスがありますか? –

+0

好きなようにビルドするだけです(例えば、 'handleRequest'メソッドを渡すなど)。私はちょうどあなたのテストで醜い 'if'sを使うのではなく、あなたの挑戦を解決するのに役立つものを指摘しました:) – gustavohenke

0

if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url) && req.url.endsWith('123')) 
関連する問題