Высмеивать ответ сервера, даже если сервер недоступен

Вещи, которые я знаю (пожалуйста, поправьте меня, если я ошибаюсь, спасибо:)):

Мои проблемы

Я хочу протестировать некоторые библиотеки, в то время как связанные с ними серверы иногда могут быть недоступны при разработке. Я просто забочусь о данных, без взаимодействия с сервером все в порядке

Возможно ли, что я могу просто вернуть ложные данные, уже подготовленные, не запрашивая сервер, когда запрос удовлетворяет некоторым шаблонам, даже если служба находится в других библиотеках?

Мои требования

  • вся логика в библиотеках остается неизменной;
  • использование фиктивных данных для ответа на http-запрос из библиотек;

Обновлено 2019-01-15

Благодаря помощи @Sachin Gupta я проверил interceptor далее с этой демонстрацией.

Что сделано:

  • auth-interceptor.ts добавить заголовки для запроса;
  • logging-interceptor.ts добавлен для отслеживания деталей запроса и стоимости времени;
  • data-mocking-interceptor.ts чтобы остановить запрос к серверу и вернуть ложные данные напрямую.

2 ответа

Решение

Посмотри на это!

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 где вы можете заполнить хранилище либо фиктивными данными напрямую, либо вернуть имитированные данные из вашего сервиса (сервис, который отправляет http-запросы на сервер и возвращает данные обратно в угловое приложение)

ИЛИ ЖЕ

  1. Используйте сервисных работников, где вы можете вернуть все, что вы хотите на основе ваших пользовательских критериев. По сути, то, что вы делаете здесь - это сначала PWA. Это еще более приятный подход, поскольку http-запросы (как источник данных) полностью абстрагированы от его использования. Все, что видит ваше приложение, - это сервисный работник, а где работающий сервис получает свои данные (http или макет) - вашему приложению все равно.

PS. Подход сервисного работника несколько похож на перехватчик, но на более низком уровне, поскольку он не специфичен для углов, а является частью веб-технологии в целом.

Другие вопросы по тегам