赛普拉斯如何断言页面不会重新加载

时间:2018-12-24 00:03:05

标签: javascript testing cypress

我正在运行一项测试,以确保单击按钮时不会重新加载页面。到目前为止,我还没有找到断言的最佳方法。最初,我想创建一条路由并等待我不想发生的xhr请求,如果发生,则使测试失败。但是,似乎没有一种方法可以从cy.wait()中捕获错误,一旦发生超时,该错误将使我无法通过测试。我当前的解决方案是确保给定元素的href以“#”开头,​​但这似乎有一个缺点,即有人可能在该事件上附加一个事件,该事件实际上会重新加载页面,并且不会被我捕获。测试。

2 个答案:

答案 0 :(得分:1)

在窗口对象上使用标志

在我的测试中,我使用了 Detect page reload from Cypress test 中描述的方法,向 shouldNotReloadOnFirefox 对象添加了一个新属性 window,然后检查它是否仍然存在(即没有重新加载):

// arrange
cy.window().then((win) => (win.shouldNotReloadOnFirefox = true));

// act 
cy.whateverYouAreTesting()

// assert
cy.window().should('have.prop', 'shouldNotReloadOnFirefox');

使用浏览器 API

截至 2021 年 5 月 27 日

performance.navigation弃用

您应该使用 PerformanceNavigationTiminggetEntriesByType 方法:

expect(performance.getEntriesByType('navigation')[0].type).to.equal(
  'reload'
);

答案 1 :(得分:0)

您可以使用Navigation Timing API

在测试中,您需要声明以下内容:

expect(performance.navigation.type).to.equal(performance.navigation.TYPE_RELOAD);