使用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”。
你可以重新别名你的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