如何根据不同的参数返回不同的模拟?

时间:2017-09-12 20:29:36

标签: angular typescript

我与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 ... < / p>

我该怎么做?

感谢@!

2 个答案:

答案 0 :(得分: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({});
  });

答案 1 :(得分:0)

找到了当前结构的简单解决方案:

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