【问题标题】:Cypress: Switching from cy.route() to cy.intercept()赛普拉斯:从 cy.route() 切换到 cy.intercept()
【发布时间】:2022-01-29 01:16:11
【问题描述】:

似乎我读到的大多数人都对此感到零麻烦。另一方面,我有一个其他人编写的测试套件,我试图用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
});    

这也不行。

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

为了排除故障,我可以看到使用intercept()时,使用intercept时有一个路由不工作(图中最下面的那个)。但是,我一生都无法理解为什么,以及如何以不同的方式编写路线匹配?

【问题讨论】:

  • getApiPrefix() 返回什么?
  • 它只是重新调整使用的前缀,'/api'。
  • docs.cypress.io/api/commands/intercept#Command-Log 使用“仪表板 - 路由”进行调试。您可能会得到不匹配的确切路线。
  • 在单击按钮后使用cy.wait() 调用它的拦截是否有别名?
  • 暂时没有,没有。

标签: cypress cy.intercept


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 我一直在挖掘,你是对的。或者,这就是答案的一部分。实际上,调用进行了两次,首先是 route(),然后是 intercept()。既然已经打了,就不会打第二个电话,但它仍然是“重要”的那个。所以,看来我在这里混合了 route() 和 intercept()。
    • 建议坚持使用intercept()。 cy.route() 中的存根与该特定端点的 cy.intercept() 不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多