在 Cypress 中多次拦截相同的 API 调用

2024-03-25

是否可以使用cy.intercept在同一个测试中多次拦截相同的 API 调用?我尝试了以下方法:

cy.intercept({ pathname: "/url", method: "POST" }).as("call1")
// ... some logic
cy.wait("@call1")

// ... some logic

cy.intercept({ pathname: "/url", method: "POST" }).as("call2")
// ... some logic
cy.wait("@call2")

我希望cy.wait("@call2")将等待第二次调用 API。然而,第二个cy.wait将立即继续,因为第一个 API 调用与第二个相同。


更新为 Cypress v7.0.0 于 2021 年 4 月 5 日发布

更改日志显示,从此版本开始,拦截现在以相反的顺序调用

响应处理程序(通过事件处理程序或通过 req.continue(cb) 提供)提供给cy.intercept()将被叫入相反的顺序直到调用 res.send 或直到不再有响应处理程序。

文档中的图表也对此进行了说明


当您设置相同的拦截时,第一个拦截将捕获所有呼叫。但您可以多次等待第一个别名。

这是一个(相当)简单的说明

spec

Cypress.config('defaultCommandTimeout', 10); // low timeout
                                             // makes the gets depend on the waits 
                                             // for success

it('never fires @call2',()=>{

  cy.intercept({ pathname: "/posts", method: "POST" }).as("call1")
  cy.intercept({ pathname: "/posts", method: "POST" }).as("call2")

  cy.visit('../app/intercept-identical.html')
  
  cy.wait('@call1')                               // call1 fires 
  cy.get('div#1').should('have.text', '201')

  cy.wait('@call2')                               // call2 never fires
  cy.wait('@call1')                               // call1 fires a second time
  cy.get('div#2').should('have.text', '201')

})

app

<body>
  <div id="1"></div>
  <div id="2"></div>
  <script>

    setTimeout(() => {
      fetch('https://jsonplaceholder.typicode.com/posts', {
        method: 'POST',
        body: JSON.stringify({ title: 'foo', body: 'bar', userId: 1 }),
        headers: { 'Content-type': 'application/json; charset=UTF-8' },
      }).then(response => {
        document.getElementById('1').innerText = response.status;
      })
    }, 500)
  
    setTimeout(() => {
      fetch('https://jsonplaceholder.typicode.com/posts', {
        method: 'POST',
        body: JSON.stringify({ title: 'foo', body: 'bar', userId: 2 }),
        headers: { 'Content-type': 'application/json; charset=UTF-8' },
      }).then(response => {
        document.getElementById('2').innerText = response.status;
      })
    }, 1000)

  </script>
</body>

你可以在 Cypress 日志中看到它,

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

在 Cypress 中多次拦截相同的 API 调用 的相关文章

  • firebase.storage() 不是玩笑测试用例中的函数

    我正在使用 Jest 来测试我的 firebase 功能 这一切都在浏览器中进行 因此我与服务器端的 firebase 没有任何冲突 当我使用firebase auth or firebase database 一切正常 当我尝试使用时fi
  • AngularJS 和 Apiary.IO - 无法读取任何响应标头?

    我使用 Apiary io 模拟我的 API 但不知怎的 我无法使用 angularJS 从响应对象中读取任何标头 我确信我至少通过检查 firebug 正确设置了 Content Type application json Angular
  • 始终滚动 div 元素而不是页面本身

    我有一个带有内部的页面布局 div 包含页面上重要内容的元素 设计的重要部分是 content height 300px width 500px overflow scroll 现在 当包含的文本大于 300px 时 我需要能够滚动它 是否
  • 在 Node.js 中实现服务器发送事件的简单方法?

    我环顾四周 似乎在 Node js 中实现 SSE 的所有方法都是通过更复杂的代码 但似乎应该有一种更简单的方法来发送和接收 SSE 是否有任何 API 或模块可以让这件事变得更简单 这是一个每秒发送一个服务器发送事件 SSE 的 Expr
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • 传单圆圈绘制/编辑问题

    我第一次制作传单 并面临绘制圆圈和编辑 更改圆圈位置 的问题 我面临的问题是 编辑 移动 圆从一个位置到另一位置会改变其半径 Note 请尝试在给定的小提琴中在地图顶部创建圆圈 然后通过单击编辑按钮将其移动到底部 如果我在地图的顶部创建圆圈
  • 如何在 .js 中的字符串中插入来自 ruby​​ 示例的变量[重复]

    这个问题在这里已经有答案了 在 ruby 中 您可以将变量插入到字符串中 如下所示 x sake puts I like x I like sake 例如 def what i like word I like word end 在 jav
  • 如何使用 QuerySelector 获得第二个匹配项?

    以下语句给出了该类的第一个元素titanic element document querySelector titanic 我如何检索具有相同类的第二个元素 Use document querySelectorAll https devel
  • 可拖动的非模态弹出窗口 Jquery Mobile

    我希望在 Jquery mobile 中有一个弹出窗口 它不会阻止用户与页面交互 并且 data dismissible false 即当页面的另一部分与页面的另一部分交互并保持可见时 弹出窗口不会消失 我已经尝试过这个 popupNew
  • 有效地获取下拉列表中的选定选项(XHTML Select 元素)

    背景 使用 XHTML Select 元素的下拉列表中有大量选项 数十个 我需要使用 JavaScript 检索所选选项 Problem 目前我正在使用 jQuery selectedCSS 选择器并且它按预期工作 但这种方法效率不高 因为
  • JavaScript - 类根据条件扩展

    事情是这样的 我有一个名为 A 的主课 我希望这个班级能够扩展 B 级 class A extends B 但事实上 我希望 B 类在特定条件下扩展 C D 或 E class B extends B1 or class B extends
  • 输入和文本区域可以拖动吗?

    MDN 规范以及我能通过 Google 找到的每个网站都说所有 HTML 元素都可以拖动 然而 在实践中 我发现我无法拖动文本输入或文本区域 即使它们已被禁用 例如 使用以下代码 img src http www placehold it
  • 字符串化 JavaScript 对象

    我正在寻找字符串化一个对象 我想要这样的输出 1 valeur dalebrun usager experttasp date 2013 08 20 16 41 50 2 valeur test usager experttasp date
  • 有没有办法显示嵌套在 Grid 组件内的 Material-UI 抽屉?

    我正在使用 Material UI 创建一个 Web 应用程序 主页分为 3 个网格 每个网格有一个height of 500px 我想在中间网格内显示一个带有一些操作选项的抽屉 那可能吗 到目前为止 我只能在整个屏幕上显示它 这是我的主要
  • 通过ajax POST提交两次表单

    插入到mysql using php通过文件调用AJAX 前insert语句php代码执行select查询到查找重复记录并继续insert statement Issue 从ajax调用php文件时 它执行了两次并得到作为重复记录的响应 好
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 如何使用 Ajax 对 Oracle APEX 表格表单执行逐行验证?

    使用我执行的相同验证 处理 基于此线程 在 Oracle APEX v4 2 2 中通过 Ajax 调用 Oracle 函数进行现场验证 https stackoverflow com questions 21474303 calling
  • 您最喜欢的 JS/CSS 下拉菜单是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 希望在网站上实现一个 只是好奇其他人都使用过什么以及他们有过什么样的体验 EDIT我也不是一个超级粉丝
  • 如何设置 .eslintrc 来识别“require”?

    我是新来的ESLint http eslint org 并且我已经成功地将 ESLint 与IntelliJ https www jetbrains com idea 开箱即用 我的 ESLint 集成无法识别node 但对文档的基本审查表
  • 当 mp4 是唯一来源时,自定义 HTML5 视频控件不起作用

    问题 我只有一个视频源 mp4 因为我正在尝试向 tumblr 视频添加自定义控件 如果只有mp4作为源video duration返回为NaN 作为使用 3 个源 mp4 webm ogg 时的测试 它可以工作 所以video durat

随机推荐

  • 将用户输入循环附加到列表中

    我是 python 编程新手 正在用它做一些实验 希望我的问题不太愚蠢 我正在编写一个小程序 将输入添加到列表中 并使用 while 循环在输入等于 4 时打印它 问题是它永远不会停止添加输入和打印列表 我的代码是 S input L wh
  • 根据查找 NP 头的规则在 NLTK 和 stanford 解析中查找名词短语的头

    一般来说 名词短语的中心词是位于 NP 最右边的名词 如下所示 树是父 NP 的中心词 所以 ROOT S NP PP
  • 如何在Python中将多行输入读取到二维数组中

    我在 python 中遇到了一个问题 要读取的二维数组的输入格式是 3 number of rows and columns of a square matrix 1 2 3 first row 3 4 6 second row 4 6 3
  • 从另一个 ViewController 调用方法

    我有一个 ViewControllerA 和一个 ViewControllerB 我想从 ViewControllerB 调用 ViewControllerA 的方法 在 ViewControllerA 中存在一个方法 NSMutableA
  • 使用 matplotlib plt.show() 绘图不可见

    我对 Python 和 Linux 非常陌生 我需要帮助 我尝试使用 matplotlib 按以下方式显示简单的绘图 from matplotlib import pyplot as plt plt plot 5 6 7 8 7 3 8 3
  • 我如何使用纯javascript解析远程html页面

    我需要解析远程 html 页面 例如 www mywesite com home 我如何获取此网站 html 页面源以及如何解析此页面 html是这样的 div class my class1 a href home link id 1 h
  • iOS 7.1 中的 safari 全屏,带有最小的 ui 元标记

    我在多个网站 包括一些 stackoverflow 问题 上读到 iOS 7 1 Safari 将会有一个 minim ui 元标记 所以今天我更新了我的iPad 但似乎没有效果 任何人都可以确认这应该有效吗 这是我的元标记 此选项仅适用于
  • celery-django 找不到设置

    我有一个 Django 项目 使用Celery http pypi python org pypi django celery用于运行异步任务 我正在 Windows XP 计算机上进行开发 启动我的 Django 服务器 python m
  • android ListView不会突出显示所选行

    在我的应用程序中 我从服务器检索用户的播放列表 并感受到ListView与数据 问题是 ListView不突出显示单击的行 为了防止愤怒的评论告诉我我不使用搜索 我尝试过以下方法 将我行中的按钮设置为不可聚焦 通过代码和 XML 设置 li
  • Java 本机接口 (JNI) 是否受 C++ ABI 兼容性问题影响?

    Java 本机接口 JNI 是否受 C ABI 兼容性问题影响 我正在开发一个 Java 应用程序 我想使用 Java 本机接口 JNI 来调用 C 库中的函数 我可以访问 C 库的代码 并且可以根据需要重建它 例如 我可以静态链接 C 运
  • 如何使用现有的 solr 核心数据创建 solr 核心?

    Solr 1 4 企业搜索服务器建议对核心副本进行大量更新 然后将其交换为主核心 我正在执行以下步骤 创建准备核心 执行索引更新 然后在准备核心上提交 优化 交换主核心和预备核心 卸载准备核心 我遇到的问题是 步骤 1 中创建的核心中没有任
  • Enlive 模板 – 添加到头部

    我的应用程序的某些页面将有自己的 js css 包含 所以我想知道如何使用 Enlive 将这些资源添加到 html 文档的头部部分 我发现 append 变压器 但没有不自动转义的 html append 或者什么是正确的方法来做到这一点
  • 污染全局命名空间

    我想这里的大多数 C 程序员都会同意污染全局命名空间是一个坏主意 但是有时这条规则可以被忽略吗 例如 我有一个需要在特定应用程序中使用的类型 我应该这样定义它 mytypes h typedef int MY TYPE foo cpp MY
  • 如何获取表示 Java 对象的序列化字节数?

    我将使用什么语法来获取表示字符串的字节数并将它们与表示字符串的字节数进行比较ArrayList例如 拿着那根绳子 我正在使用多代理代理系统通过消息发送对象 并且我想跟踪每条消息占用的空间 该方法不必非常准确 只要它与对象的实际大小成比例即可
  • 当jasper中未显示上述组件时,如何使用positionType将组件上拉?

    positionType Float 如果上面的组件拉伸 则组件上的组件会自行下拉 但如果上述组件缩小 不显示 则不会向上移动 以下是使用的版本
  • 如何在websphere中配置和使用jstl

    有谁知道如何在 websphere 中配置 jstl 我知道我们在 web xml 中使用了 taglib 指令 我在 websphere 5 1 2 中哪里可以找到 web xml 以及如何添加配置 你不需要修改web xml根本不 一些
  • jQuery 组合框/选择自动完成? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否存在用于替换选择 组合框的 jQuery 插件 我尝试了SexyCombo 它与我想要的非常接近 但
  • 2 个数组值之一颜色之一使 D3 条形图在值的相同索引处具有颜色

    我有 2 个数组 values 1 2 3 4 5 4 7 2 9 10 colors red red blue blue green green orange orange pink pink 我正在尝试构建一个 D3 条形图 其中每个条
  • .NET Windows 窗体应用程序自我更新的最佳方式是什么?

    我使用自行开发的系统 其中应用程序通过 Web 服务自行更新 然而 我似乎记得最初的 NET 销售宣传中有关组件自动更新是 NET 的内置功能的内容 让应用程序更新自身和 或其使用的程序集的最佳实践是什么 您可能想了解一下 Click On
  • 在 Cypress 中多次拦截相同的 API 调用

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