模拟服务器响应,即使服务器无法访问

mock the server response even the server is unreachable

我知道的(如有错误请指正,谢谢:)):

我的问题

我想测试一些库,而它们的相关服务器在开发时有时会宕机我只关心数据,不与服务器交互是可以的

Is it possible that I can just return a mock data already prepared without requesting the server when the request met some patterns even the service lies in other libraries?

我的要求

2019-01-15 更新

感谢@Sachin Gupta的帮助,我测试了interceptor further with this demo

已完成:

看看这个。

https://stackblitz.com/edit/angular-json-http-response-catch

如果服务器可达,则填充数据,否则将模拟作为响应发送

拦截器

export class NoopInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler):
    Observable<HttpEvent<any>> {
      let response = new HttpResponse();
      response = response.clone({body: [{"sads":"ewre"}]});
   
    return next.handle(req).pipe(catchError((err) => {return of(response).pipe(delay(10))}) );
  }
}

您还有 2 个其他选项可供考虑:

  1. 使用 ngrx store,您可以直接使用模拟数据或来自您的服务的 return 模拟数据填充商店(服务是向服务器发送 http 请求的服务,return s 数据返回到 angular 应用)

  1. 根据您的自定义条件,在您可以 return 任何您想要的地方使用服务人员。本质上,您在这里所做的是离线优先 PWA。这是更好的方法,因为 http 请求(作为数据源)完全从其用法中抽象出来。你的应用程序看到的只是服务工作者,服务工作的地方获取它的数据(http 或模拟)——你的应用程序不关心。

PS。 Service Worker 方法有点类似于拦截器,但级别较低,因为它不是 angular 特定的,而是一般网络技术的一部分。