首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 7使用模拟http请求测试retryWhen无法实际重试

Angular 7是一种流行的前端开发框架,用于构建现代化的Web应用程序。在开发过程中,我们经常需要进行模拟http请求的测试,以确保应用程序的稳定性和正确性。retryWhen是Angular中的一个操作符,用于在http请求失败时进行重试。

在Angular中,我们可以使用HttpClientTestingModule来模拟http请求的测试。它提供了一些工具和方法,使我们能够模拟http请求并对其进行断言。对于retryWhen操作符,我们可以使用jasmine的测试框架来编写测试用例。

下面是一个示例的测试用例,用于测试在retryWhen无法实际重试时的情况:

代码语言:txt
复制
import { TestBed, inject } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { retryWhen } from 'rxjs/operators';

describe('HttpClientTestingModule', () => {
  let httpClient: HttpClient;
  let httpTestingController: HttpTestingController;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
      providers: [HttpClient]
    });

    httpClient = TestBed.inject(HttpClient);
    httpTestingController = TestBed.inject(HttpTestingController);
  });

  afterEach(() => {
    httpTestingController.verify();
  });

  it('should retry http request when retryWhen is used', () => {
    const url = 'https://api.example.com/data';

    // 设置模拟的http请求
    httpClient.get(url)
      .pipe(retryWhen(errors => errors))
      .subscribe(
        response => {
          // 断言请求成功的逻辑
          expect(response).toBeTruthy();
        },
        (error: HttpErrorResponse) => {
          // 断言请求失败的逻辑
          expect(error).toBeTruthy();
        }
      );

    // 模拟http请求
    const req = httpTestingController.expectOne(url);
    expect(req.request.method).toEqual('GET');

    // 返回一个错误响应
    req.flush('Error', { status: 500, statusText: 'Internal Server Error' });

    // 断言http请求被重试
    const retryReq = httpTestingController.expectOne(url);
    expect(retryReq.request.method).toEqual('GET');

    // 返回一个成功响应
    retryReq.flush({ data: 'Test Data' });
  });
});

在上面的测试用例中,我们首先导入了HttpClientTestingModule和HttpTestingController,然后在beforeEach函数中进行了初始化。在测试用例中,我们使用httpClient.get方法发起了一个http请求,并使用retryWhen操作符进行重试。在模拟的http请求中,我们首先返回一个错误响应,然后断言http请求被重试,并返回一个成功响应。

这是一个简单的示例,用于演示如何测试在retryWhen无法实际重试时的情况。根据具体的业务需求和场景,测试用例的编写可能会有所不同。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(TBCS):https://cloud.tencent.com/product/tbcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连

功能说明 功能需求说明 注:关于 Rxjava中的retryWhen() 操作符的使用请看文章Android RxJava:功能性操作符 全面讲解 功能逻辑 实例说明 在本例子中:采用Get方法对...金山词霸API 发送网络请求 通过 断开网络连接 模拟 网络异常错误(恢复网络即可成功发送请求) 限制重试次数 = 10次 采用 Gson 进行数据解析 3....& 通过retryWhen()进行重试 // 注:主要异常才会回调retryWhen()进行重试 observable.retryWhen(new Function<Observable...一开始先通过 断开网络连接 模拟 网络异常错误,即开始重试; 等到第3次重试后恢复网络连接,即无发生网络异常错误,此时重试成功 4....总结 本文主要讲解了 Rxjava创建操作符的实际开发需求场景:网络请求出错重连需求 ,并结合Retrofit 与RxJava 实现 下面我将结合 实际场景应用 & Rxjava的相关使用框架(如Retrofit

1.8K30

精讲响应式WebClient第6篇-请求失败自动重试机制

我们本节为大家介绍的实际上是另外一种异常处理机制:请求失败之后自动重试。当WebClient发起请求,没有得到正常的响应结果,它就会每隔一段时间再次发送请求,可以发送n次,这个n是我们自定义的。...一、请求异常重试 下面的代码是请求"http://jsonplaceholder.typicode.com" 网站的服务,该网站是一个免费提供HTTP请求测试的服务端网站,我们可以用它测试WebClient...需要注意的是:正常的GET方法请求地址是"/posts/1",我特意的把它写错成为"/postss/1",这样可以触发404资源无法找到的异常。...在实际的开发中,可以请求重试的场景应该是:网络异常、请求超时异常、服务端突然面临高并发导致的临时处理能力不足导致的超时等这种由于外部原因导致的异常场景。...所以说Webclient已经在源码中,将retryBackoff()标记为废弃,建议使用retryWhen()代替它。retryWhen()可以指定针对某些异常进行重试,其他异常不做重试

2.6K31
  • Android RxJava应用:网络请求出错重连(结合Retrofit)

    今天,我将为大家带来 Rxjava创建操作符的实际开发需求场景:网络请求出错重连需求 ,并结合Retrofit 与RxJava 实现,希望大家会喜欢。...金山词霸API 发送网络请求 通过 断开网络连接 模拟 网络异常错误(恢复网络即可成功发送请求) 限制重试次数 = 10次 采用 Gson 进行数据解析 3....& 通过retryWhen()进行重试 // 注:主要异常才会回调retryWhen()进行重试 observable.retryWhen(new Function<Observable...一开始先通过 断开网络连接 模拟 网络异常错误,即开始重试; 等到第3次重试后恢复网络连接,即无发生网络异常错误,此时重试成功 4....总结 本文主要讲解了 Rxjava创建操作符的实际开发需求场景:网络请求出错重连需求 ,并结合Retrofit 与RxJava 实现

    1.4K20

    Spring Cloud Gateway重试机制

    前言 重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。...重试也要注意应用场景,读数据的接口比较适合重试的场景,写数据的接口就需要注意接口的幂等性了。还有就是重试次数如果太多的话会导致请求量加倍,给后端造成更大的压力,设置合理的重试机制才是最关键的。...今天我们来简单的了解下Spring Cloud Gateway中的重试机制和使用。...使用讲解 RetryGatewayFilter是Spring Cloud Gateway对请求重试提供的一个GatewayFilter Factory。..., DELETE, OPTIONS, TRACE; } exceptions:指定哪些异常需要进行重试逻辑,默认值是java.io.IOException 代码测试 就写个接口,在接口中记录请求次数,然后抛出一个异常模拟

    70220

    Spring Cloud Gateway重试机制

    前言 重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。...重试也要注意应用场景,读数据的接口比较适合重试的场景,写数据的接口就需要注意接口的幂等性了。还有就是重试次数如果太多的话会导致请求量加倍,给后端造成更大的压力,设置合理的重试机制才是最关键的。...今天我们来简单的了解下Spring Cloud Gateway中的重试机制和使用。...使用讲解 RetryGatewayFilter是Spring Cloud Gateway对请求重试提供的一个GatewayFilter Factory。..., DELETE, OPTIONS, TRACE; } exceptions:指定哪些异常需要进行重试逻辑,默认值是java.io.IOException 代码测试 就写个接口,在接口中记录请求次数,然后抛出一个异常模拟

    2K30

    RxJava2 实战知识梳理(6) - 基于错误类型的重试请求

    作者:泽毛 地址:http://www.jianshu.com/p/d135f19e045c 声明:本文是泽毛原创,已获其授权发布,未经原作者允许请勿转载 一、前言 1.1 应用背景...在网络请求时,有时候会出现需要进行重试的情况,重试的时候,有以下几点需要注意: 限制重试的次数 根据错误类型,判断是否要重试 根据错误类型,等待特定的时间之后再去重试 我们先来看一下目前的一些网络框架是怎么做的...通过分析Volley的源码,可以从BasicNetwork的代码中看到,它是将网络请求的代码都放在一个无限的while(true)循环当中,如果发生了异常,会在其中的catch语句中进行处理,如果需要继续重试...1.2 示例代码 在下面的例子中,我们一共发起了五次请求,也就是subscribe中的代码,其中前四次请求都调用onError方法通知下游请求失败,同时带上了自定义的错误信息wait_short...当我们收到错误之后,会根据错误的类型确定重试的时间,同时,我们还保存了当前重试的次数,避免无限次的重试请求

    1.4K10

    Angular快速学习笔记(4) -- Observable与RxJS

    中的observables Angular 中大量使用了可观察对象,作为处理各种常用异步操作的接口。...HTTP 模块使用可观察对象来处理 AJAX 请求和响应 路由器和表单模块使用可观察对象来监听对用户输入事件的响应 事件发送器 EventEmitter Angular 提供了一个 EventEmitter...Angular 的 HttpClient 从 HTTP 方法调用中返回了可观察对象。...例如,http.get(‘/api’) 就会返回可观察对象。 为什么NG使用observable而不是Promise?...反之,你可以使用一系列操作符来按需转换这些值 HTTP 请求是可以通过 unsubscribe() 方法来取消的 请求可以进行配置,以获取进度事件的变化 失败的请求很容易重试 Async 管道 AsyncPipe

    5.2K20

    SpringCloud升级之路2020.0.x版-38. 实现自定义 WebClient 的 NamedContextFactory

    在这个默认配置中,主要是给每个微服务都定义了一个 WebClient 定义 WebClient 的配置类 我们编写下上一节定义的配置,包括: 微服务名称 微服务地址,服务地址,不填写则为 http://...微服务名称 连接超时,使用 Duration,这样我们可以用更直观的配置了,例如 5ms,6s,7m 等等 响应超时,使用 Duration,这样我们可以用更直观的配置了,例如 5ms,6s,7m 等等...可以重试的路径,默认只对 GET 方法重试,通过这个配置增加针对某些非 GET 方法的路径的重试;同时,这些路径可以使用 * 等路径匹配符,即 Spring 中的 AntPathMatcher 进行路径匹配多个路径...(waitDurationMillis)) doOnComplete(context::onComplete):请求完成,没有异常之后,调用 retry 的 complete 进行清理 增加断路器: /...,但是不会直接使用上面的代码,因为考虑到: 需要在重试以及断路中加一些日志,便于日后的优化 需要定义重试的 Exception,并且与断路器相结合,将非 2xx 的响应码也封装成特定的异常 需要在断路器相关的

    74210

    针对网关非 Get 请求重试

    HTTP响应状态码,则检查响应码是否可以重试 if (!...} 总结起来,流程简化如下: 判断本次请求 HTTP 方法是否被 RetryConfig.methods 包含和 HTTP 响应码是否在 RetryConfig.series 的范围内或者 statuses...判断本次请求 HTTP 方法是否被 RetryConfig.methods 包含和 异常是否在 RetryConfig.exceptions 的集合内(是其中的某个异常的子类也可以),如果在,看本次请求的...配置的时候,HTTP 方法如果包含所有方法,那么没办法区分 GET 请求或者是 非 GET 请求;如果建立两个 Filter 一个拦截 GET 另一个拦截 非GET,那么他们共用的 Attribute...所以,最后使用了这样一个不优雅的设计,就是 GET 和非 GET 使用不同的 RetryConfig,GET 的还是根据application.properties配置来,针对非 GET 请求,强制重试下面这些异常

    58520

    Rxjava2-小白入门(三)

    那么下面我在实例中去使用吧!...---- 防止按钮重复(连续)点击 在实际应用中可能在提交信息,登录的时候每次点击按钮就会发送网络请求,当网络比较慢的时候或是其他原因已经请求网路只是返回的数据比较慢,当我们连续点击就会连续的发送请求,..."20元"); User user1 = new User("裤子", "22元"); List mList = new ArrayList();//模拟请求返回的数据...实际操作下会更加深印象。这里我就不咱代码了。 ---- 发送验证码倒计时 这个实例我们用到Interval操作符: ? ? 具体代码操作: ? ?...retryWhen和retry的主要区别概括来说就是retryWhen将错误的信息发送下去(出错了就发送错误信息),retry是出错了会先尝试重新订阅再发送一变,当达到设置的重试次数时还没有成功才会发出错误的信息

    71320

    RxJava处理业务异常的几种方式关于异常处理业务异常总结

    当程序中可能出现检查性异常时,要么使用try-catch语句进行捕获,要么用throws子句抛出,否则编译无法通过。...重试 不是所有的错误都需要立马反馈给用户,比如说在弱网络环境下调用某个接口出现了超时的现象,也许再请求一次接口就能获得数据。那么重试就相当于多给对方一次机会。...如果网络请求失败的话,会调用retryWhen操作符。RetryWithDelay实现了Function接口,RetryWithDelay是一个重试的机制,包含了重试的次数和重试时间隔的时间。...曾经遇到过一个复杂的业务场景,需要多个网络请求合并结果。这时,我使用zip操作符,让请求并行处理,等所有的请求完了之后再进行合并操作。...某些请求失败的话,我使用重试机制,某些请求失败的话我给了默认值。 3. 使用onError处理异常 现在的Android开发中,网络框架是Retrofit的天下。

    2.6K30

    Carson带你学Android:RxJava功能性操作符

    3.4 在事件的生命周期中操作 需求场景 在事件发送 & 接收的整个生命周期过程中进行操作 如发送事件前的初始化、发送事件后的回调请求等 对应操作符使用 do() 作用 在某个事件的生命周期中调用...(具备重试次数限制 // 参数 = 设置重试次数 & 判断逻辑 具体使用 // 作用:出现错误时,让被观察者重新发送数据 // 注:若一直错误,则一直重新发送 Observable.create...实际开发需求案例 下面,我将 结合Retrofit & RxJava,讲解功能性操作符的3个实际需求案例场景: 线程操作(切换 / 调度 / 控制 ) 轮询 发送网络请求时的差错重试机制 4.1...:(有条件)网络请求轮询 4.3 发送网络请求时的差错重试机制 需求场景说明 功能说明 下面我将结合 Retrofit 与RxJava 用一个具体实例来实现 发送网络请求时的 差错重试机制需求...具体请看文章:Android RxJava 实际应用讲解:网络请求出错重连(结合Retrofit) 5.

    91110

    Android RxJava操作符详解 系列:功能性操作符

    (具备重试次数限制 // 参数 = 设置重试次数 & 判断逻辑 具体使用 // 作用:出现错误时,让被观察者重新发送数据 // 注:若一直错误,则一直重新发送 Observable.create...此处不作过多描述 retryWhen() 作用 遇到错误时,将发生的错误传递给一个新的被观察者(Observable),并决定是否需要重新订阅原始被观察者(Observable)& 发送事件 具体使用...实际开发需求案例 下面,我将 结合Retrofit & RxJava,讲解功能性操作符的3个实际需求案例场景: 线程操作(切换 / 调度 / 控制 ) 轮询 发送网络请求时的差错重试机制 4.1...下面,我将结合 Retrofit 与RxJava 用一个具体实例来实现轮询需求 具体请看文章:Android RxJava 实际应用讲解:(有条件)网络请求轮询 ---- 4.3 发送网络请求时的差错重试机制...下面我将结合 Retrofit 与RxJava 用一个具体实例来实现 发送网络请求时的 差错重试机制需求 具体请看文章:Android RxJava 实际应用讲解:网络请求出错重连(结合Retrofit

    1.1K10
    领券