You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cypress中模拟返回HttpProgressEvent以测试文件上传进度?

在Cypress中模拟HttpProgressEvent响应

可以通过Cypress的cy.intercept()结合自定义处理函数来模拟HttpProgressEvent,以此测试文件上传/下载时的加载标记。

具体实现方式是使用cy.intercept()的回调模式,通过res.progress()方法手动触发进度事件,Angular的HttpClient会捕获这些事件并触发订阅回调中的进度处理逻辑。

示例代码

// 拦截目标请求,模拟进度事件
cy.intercept('GET', 'someUrl', (req) => {
  req.reply((res) => {
    // 模拟第一次进度更新
    res.progress({
      loaded: 30,
      total: 100,
      type: 'download' // 根据场景选择'upload'或'download'
    });

    // 延迟后发送第二次进度
    setTimeout(() => {
      res.progress({
        loaded: 70,
        total: 100,
        type: 'download'
      });
    }, 500);

    // 最后完成请求,返回响应
    setTimeout(() => {
      res.send({
        statusCode: 200,
        body: {} // 你的响应体内容
      });
    }, 1000);
  });
});

// 测试加载标记的显示逻辑
cy.get('button').click(); // 触发请求的操作
cy.get('.loading-indicator').should('be.visible'); // 断言加载标记显示
cy.get('.loading-indicator').should('not.exist'); // 请求完成后断言标记隐藏

关键说明

  • res.progress()方法传递的对象需要符合浏览器ProgressEvent的结构,核心字段包括:
    • loaded: 已加载的字节数或百分比
    • total: 总字节数或总百分比
    • type: 事件类型,可选upload或download
  • 通过延迟触发多次进度事件,可以更真实地模拟大文件加载的渐进过程,确保UI中的加载标记能持续显示直到请求完成。

内容的提问来源于stack exchange,提问作者Frimlik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:51:06