1

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

例子:

这有效:

cy.route('POST', getApiPrefix() + '/prosjektfinansiering/'+ pfId +'/eiendom', result);

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

cy.intercept('POST', getApiPrefix() + '/prosjektfinansiering/'+ pfId +'/eiendom', result);

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

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

更新:

进一步尝试:

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

return cy.intercept('POST', getApiPrefix() + '/prosjektfinansiering/'+ pfId +'/eiendom', {
    body: result
});    

这也行不通。

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

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

在此处输入图像描述

4

2 回答 2

4

最有可能的是,您正在混合使用 cy.route() 和 cy.server() 的旧用法。根据我的经验,这两者不会很好地协同工作。刚开始使用 cy.intercept() 会更容易。

您的更新也是正确的;您必须将要模拟的返回值封装在 {body: value} 中。

于 2022-01-28T09:08:44.727 回答
3

从我在您带圆圈的屏幕截图中看到的情况来看,在您尝试拦截 API 后不会调用该 API。(#列下的计数是-)

您需要跟踪何时调用 API,并确保在调用之前进行拦截。Cypres 可以帮助您解决这个问题。您可以在 cypress 窗口中完成运行步骤。

如果您不介意,也可以分享这个。

如果您 100% 确定按钮会拨打电话。步骤应该是:

cy.intercept() cy.get('button').click()

在 cypress 窗口中,单击后,您应该会看到正在调用的 API。

于 2022-01-28T17:16:11.397 回答