问题标签 [cy.intercept]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
983 浏览

javascript - 赛普拉斯拦截 - 在同一测试用例中使用不同的有效负载多次执行相同的 api

我想使用不同的有效负载执行多次相同的 API,但它不起作用。

0 投票
2 回答
531 浏览

javascript - 赛普拉斯拦截在测试运行中多次调用时阻止请求

我在 Cypress 中创建了一些测试,以便在我们的 Angular 应用程序中添加和复制文章。测试ArticlesTest.js的代码

WaitUntilPageLoaded()方法代码为:

反过来,它是自定义赛普拉斯命令:

在第一次beforeEach()运行中,拦截GetArticles并等待它完成 没有问题。第一次测试 - beforeEach() 方法运行 问题从第二次测试开始,因为看起来GetArticles没有被拦截,它根本没有被调用,尽管它应该是。手动单击应用程序时不存在该问题,并且始终调用 /articles/get。 在此处输入图像描述 测试以错误消息结束

30000 毫秒后重试超时:cy.wait() 超时等待 30000 毫秒以等待对路由的第一个请求:GetArticles。从未发生过请求。

我也尝试过使用其他端点,例如vatcodes/get,它工作得很好。该问题仅发生在articles/get上,但我没有看到任何线索可以告诉我为什么文章端点会发生这种情况。

问题是什么?为什么赛普拉斯“阻止”第二次调用此端点?更有趣的是, GetFeatures别名不存在这个问题,它以相同的方式创建。

0 投票
2 回答
79 浏览

cypress - 赛普拉斯:从 cy.route() 切换到 cy.intercept()

似乎我读到的大多数人都对此感到零麻烦。另一方面,我有一个其他人编写的测试套件,我试图用intercept() 替换route()。API 拦截是为了处理按钮点击等,如果我只是替换它,大约 99.9% 的拦截会失败。所以,显然有一些语法在/使用拦截()我还没有找到描述。

例子:

这有效:

这不起作用。不执行按钮单击:

我尝试在“/prosjekt ...”前面添加“**”,并且尝试删除“POST”,但没有成功。

有任何想法吗?如有必要,我很乐意发布更多信息。

更新:

进一步尝试:

在这里和那里得到一些提示,似乎这是使用intercept()的更正确的方法:

这也行不通。

这些示例中的变量结果是一个对象,描述了在路由中发送回 POST 请求前端的内容与 api 路径匹配。

对于故障排除,我可以看到在使用intercept() 时,使用intercept 时有一个路由不起作用(图片中的底部)。但是,我一生都无法理解为什么,以及如何以不同的方式编写路线匹配?

在此处输入图像描述

0 投票
1 回答
19 浏览

cypress - 赛普拉斯拦截不覆盖赛普拉斯别名

我正在做一些测试,我拦截了一些对同一个 url 的 api 调用,我在 beforeEach 之前做了一个,然后在测试中做了另一个,但由于某种原因,我不明白我更改了别名。我正在阅读,并且覆盖已修复,但显然不是?请随时提出更多问题。希望我能得到一些意见。

我的代码:

以下错误:

在此处输入图像描述

如果没有覆盖,如何克服这个测试?

提前致谢。

0 投票
1 回答
29 浏览

javascript - 赛普拉斯:如何在整个测试过程中测试路由状态代码?

我有一个测试,其中某个获取请求发生了大约 70 次,在测试结束时,我需要检查所有状态代码是否为200or 204。到目前为止,我正在拦截该请求并可以检查该response.statusCode1 个请求,但我无法为其余的请求执行此操作。这是我到目前为止所拥有的。

我得到的错误是

4000 毫秒后重试超时:cy.its() 出错,因为属性:响应在您的主题上不存在。

cy.its() 等待指定的属性响应存在,但它从未存在。

有人能帮忙吗?

0 投票
1 回答
24 浏览

javascript - 如何冻结请求以测试使用赛普拉斯禁用的组件?

我正在使用 VueJS 和 Cypress 来测试应用程序 e2e。我有一个模式,用户填写表格并单击“发送”按钮。当用户单击该按钮时,我们禁用表单字段和按钮,因此用户将无法填写/单击它们。之后,我们执行 POST 请求来上传数据,完成后,我们再次启用(并关闭模式)。这样做的方法:

我想测试这些组件是否真的被禁用,使用赛普拉斯。但问题是我似乎无法弄清楚如何“冻结”发布请求并检查它是否被禁用。我当前的代码如下所示:

我怎样才能让cy.get('div[role="dialog"]').find('button').eq(1).click()“等待”?我可以检查它是否被禁用的方式: