基本上,在我们的内部系统中,我们有一个订单页面,有人填写,然后点击“保存”将其“发布”到数据库。然后显示已发布的页面并发送综合浏览量 POST。
我尝试遵循以下示例 -->
cy.intercept('POST', '/api/order/').as('orderPublished');
cy.intercept('POST', '/api/user/pageview', cy.spy().as('postSpy');
cy.wait('@orderPublished').then((capture) => {
cy.log('pageViewPostCount --> ', cy.get('@postSpy').its('callCount'));
});
然而,我没有得到一个计数,而是在日志中得到一个窗口对象 -->
我试图找出两件事:
- 我是否为返回的拦截对象正确创建了间谍?
- 如何获取别名的调用计数值的路径?
我查看了 Cypress 的文档,它展示了如何“监视”易于创建的对象或易于引用的方法,但我没有看到有关如何执行我正在尝试的操作的示例。我看过一两篇文章提到 @ 对 cy.get 不起作用,但在其他文章中人们说它有效。显然,我通过日志得到了一些东西,它出现了窗口对象,所以不确定如何继续。
我已经排除了多行代码,但传统的 cy.intercept().as(aliasName) 与 cy.wait(aliasName) 相结合对此不起作用。
获取记录异步发生的事件(例如等待网络拦截)的间谍的调用计数是相当棘手的。
该命令为您提供当时
cy.get('@postSpy')
间谍的快照,但它不会等待所有调用完成。根据您的描述,
orderPublished
首先发生然后pageview
。所以你也需要等待pageview
。使用
cy.intercept(...).as('some-alias')
实际上是一个间谍,所以你可以cy.spy()
完全删除代码。所以,首先这样做
现在的问题是——你想用它做什么
callCount
?如果你的测试是
你如何检查第二个电话从未发生过?
IMO 最好的办法是允许测试失败并断言它确实失败了。
done
向测试添加一个参数添加一个
cy.on('fail')
处理程序来捕获测试失败添加第二个
cy.wait('@pageview')
会导致失败cy.log() 有什么问题
语句中的问题
cy.log()
在于,所有cy.get()
返回的都是您在屏幕截图中看到的对象,而不是callCount
您想要的原始数字。您可以使用 来解决这个问题
.then()
,尽管正如已经提到的那样,这并不能帮助您通过测试。