Cypress.io - 断言没有XHR请求到URL?

问题描述 投票:9回答:1

使用cypress.io进行测试时,有没有一种方法可以断言没有对给定的URL发出XHR请求?

我想声明在单击“保存”按钮时添加了新的foo,但是在单击“取消”按钮时则没有。

像这样的东西:

cy.route('POST', '/foos').as('postFoo');
cy.get('.cancel-button').click();
cy.route('@postFoo').should('not.have.been.called'); // (magic imaginary syntax!)

我已经尝试使用执行assert.fail的onRequest回调设置cy.route,但是当调用URL时,这并没有使测试失败。

现在,我正在抓住我的(故意)“没有请求发生”错误,如下所示:

cy.on('fail', (err, runnable) => {
  expect(err.message).to.include('No request ever occurred.');
  return false;
});  

cy.wait('@postFoo', { timeout: 0 }).then(xhr => {
  throw new Error('Unexpected API call.');
});

...这似乎有效,但它肯定不会感到非常“cypress-y”。

cypress
1个回答
5
投票

你可以重新别名你的route并改变它的onRequest行为扔掉;然而,断言事情没有发生通常更糟,因为它们是非确定性的。在继续之前,您应该等待多长时间才能发现错误? :

cy.route({
  method: 'POST',
  url: '/foos',
  onRequest: () => {
    throw new Error('Whoops')
  }
})
cy.get('.cancel-button').click();
cy.wait(1000)  // give it one second to throw, then move on

这样的断言只会给你的测试增加不必要的时间。这种类型的测试被称为Conditional Testing as mentioned in the Cypress Docs

© www.soinside.com 2019 - 2024. All rights reserved.