您可以在 Cypress 中限制请求而不是响应吗?

2024-01-01

我正在尝试在 Cypress 中端到端测试文件上传页面,其中包括测试文件上传进度条是否有效。

不幸的是,在本地环境中,上传会立即发生,因此不会显示进度条。

我知道你可以限制response速度使用cy.intercept()模拟慢速网络。然而,这并没有减缓request上传速度:

cy.intercept('post', `/route`, (req) => {
    req.on('response', (res) => {
        res.setThrottle(1000) 
    })
}).as('post')

有什么方法可以对传出请求应用限制吗?


在路由处理程序中,使用setTimeout()延迟呼叫req.continue().

获取要等待的命令队列setTimeout,返回一个 Promise 包装器。看请求阶段 https://docs.cypress.io/api/commands/intercept#Request-phase

如果处理程序返回 Promise,则等待 Promise 解析。

如果您希望延迟时间长于默认的命令超时 4 秒,则需要增加配置,因为cy.intercept不采用超时选项。

Cypress.config('defaultCommandTimeout', 6000)  // timeout in 6 seconds

cy.intercept('POST', '/route', (req) => {
  return new Promise(resolve => {
    setTimeout(() => resolve(req.continue()), 5000) // delay by 5 seconds
  })
}).as('delayedRequest')

// trigger POST

cy.wait('@delayedRequest')  

Cypress.config('defaultCommandTimeout', 4000)  // revert to normal timeout 

中间件

如果您已经有一个复杂的拦截,您可以在中间件拦截中设置延迟。

中间件始终首先执行,但如果不处理请求,则调用将传递到下一个拦截。

// request is delayed here
cy.intercept('POST', '/route', {
    middleware: true                       // middleware always fires first
  }, 
  (req) => new Promise(resolve => 
    setTimeout(() => resolve(), 5000)      // no handler, just delay
  )
)

// then passed to here
cy.intercept('POST', '/route', 
  (req) => {
    req.continue()                            // handler for request
  }
).as('delayedRequest')

// trigger POST

cy.wait('@delayedRequest')  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您可以在 Cypress 中限制请求而不是响应吗? 的相关文章

  • 测试 API 调用不会在 Cypress 中发生

    我在我的应用程序中实现了 API 数据缓存 这样如果数据已经存在 就不会重新获取 我可以拦截初始获取 cy intercept api things as api cy visit things cy wait api passes 为了测
  • 返回父元素 - Cypress 中的 CSS 选择器

    有人可以在以下情况下提供帮助吗 我必须办理登机手续if语句元素是否存在 由于没有可能使用Xpath in find命令 使用 Xpath 运行时引发语法错误 我的代码看起来 cy xpath list eq index then el1 g
  • 如何在 Cypress.io 中强制测试失败

    在 Cypress io 中 如果满足特定条件 有没有一种方法可以强制测试失败 例如 在我的网页上 如果字符串 抱歉 出了点问题 出现在我希望测试失败的页面上 目前这就是我正在做的事情
  • 如何使用 Cypress 检查可能不存在的元素

    我正在编写 Cypress 测试来登录网站 有username and password字段和一个Submit按钮 大多数登录都很简单 但有时首先会出现一个警告对话框 必须将其关闭 我试过这个 cy get login username t
  • 赛普拉斯抛出安全错误

    我目前正在使用 Chrome 74 运行 并尝试使用 Cypress 来测试我的应用程序中的样式指南 当我加载 Cypress 时 它会抛出此错误 安全错误 阻止了来源为 http localhost 3000 的框架 访问跨源框架 请告诉
  • Quasar2 Vue3 Cypress 滑动切换状态与 Cypress 浏览器上显示的内容不匹配

    我的 vue 模板
  • 比较日期时间函数 cypress

    我有一个表单 允许用户输入日期范围 并且输出将仅包含该特定日期的结果 我可以使用 type 函数将日期输入到表单中 但是 我不确定如何检查结果是否在指定的范围内 例如 如果输入的日期是 17 03 2019 我应该能够使用这样的代码检查表中
  • 等待 Cypress 中未覆盖的元素

    我收到错误 imed out retrying cy click failed because this element a class icon href home a is being covered by another elemen
  • 当父元素具有 CSS 属性:display: none 时,Cypress 如何断言元素可见

    如何为父元素隐藏 css 属性的元素编写 cypress 可见断言 我有以下 HTMl 代码 td class item total item total mobile hidden p class mobile show block pr
  • 如何选择 cypress 自动完成字段

    我如何在 cypress 中选择自动完成字段 该字段如下所示 这是 HTML 代码 div class mui select span style color rgb 51 51 51 font family none font size
  • 交互运行 cypress 命令

    是否可以打开浏览器并交互运行 cypress 测试命令 类似于使用scriptsChrome 开发者工具中的选项卡 每次启动浏览器运行测试花费的时间太长 我理解这种痛苦 但据我所知 赛普拉斯的自动扫描功能会在您更新测试时 重新运行 测试 换
  • Cypress 在请求正文中使用文件进行 HTTP POST 时出错

    我从 Cypress 6 8 0 升级到 7 0 1 升级后 当 Cypress 测试之一调用此函数时 async saveTask task file const requestBody new FormData requestBody
  • 如何使用 cypress.io 更改数据库中记录的属性

    我是 cypress 的新手 我想知道如何进行以下检查 我有一个案例 我在数据库中有一个产品 其状态可以是 InStock OutOfStock 和 Discontinued 如果产品处于 InStock 状态 我应该能够将其发送给客户 如
  • 在 Cypress 中多次拦截相同的 API 调用

    是否可以使用cy intercept在同一个测试中多次拦截相同的 API 调用 我尝试了以下方法 cy intercept pathname url method POST as call1 some logic cy wait call1
  • cypress 支持软断言吗?

    cypress 支持软断言吗 例如 我正在浏览 n 个元素并想要验证它们的值 如果任何元素的值不匹配 则测试失败 它不会继续验证下一个元素的值 有没有办法验证所有元素值并在最后显示失败的值 EDIT 我可能误解了 如果你的意思是软断言cy命
  • 预扫描网页进行动态测试

    寻找 JeffTanner 提出的问题的明确答案here https stackoverflow com questions 69095677 cypress adding tests dynamically within a wrap a
  • Cypress:信用卡支付的自动测试[重复]

    这个问题在这里已经有答案了 我正在做信用卡付款的自动测试 不幸的是 测试在 到期日期 项中失败了 my code cy getWithinIframe name cardnumber type 4242424242424242 cy get
  • 在 javascript 中将响应正文 blob 转换为 json 或纯文本

    在我的 cypress 测试中 我提交了一个请求 在响应中 主体返回为blob 我怎样才能检查some text体内的内容 有什么办法可以转换blob into json or plain text 请参阅随附的屏幕截图 添加下面的测试代码
  • 使用 Cypress 绕过 UI 登录

    我在绕过 UI 登录时遇到问题 我的 Web 应用程序不使用 API 来验证用户身份 没有像这样的端点 login index php只需打开登录页面并提交表单即可登录 应用程序通过以下方式对用户进行身份验证auth REQUEST use
  • Cypress:在 JSON 响应中存根特定键

    我想在 Cypress 中存根以下响应 专门存根密钥ds version 可能的值为 0 1 或 2 每个值将在 UI 上显示不同的元素 fixtures user json email email protected cdn cgi l

随机推荐