簡體   English   中英

如何根據不同的參數返回不同的模擬?

[英]How to return different mock based on different params?

我有一個帶有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,我想返回一個json結果,如果id為4545,我想返回一個不同的json ...

我該怎么做呢?

謝謝@!

我假設您的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({});
  });

找到了當前結構的簡單解決方案:

if (request.method === RequestMethod.Get && new RegExp('\/person').test(request.url) && req.url.endsWith('123'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM