Хорошо, чтобы добиться этого, я использовал следующее:
it.skip('does not trigger products requests', () => {
Cypress.on('fail', (error, runnable) => {
if (error.message.indexOf('Timed out retrying') !== 0) throw error
})
cy.server()
cy.route({
method: 'POST',
url: '[url]',
}).as('products')
cy.shortcutThatTriggersRequest()
cy.wait('@products', {
requestTimeout: 1000,
}).then((xhr) => {
assert.isNull(xhr.response.body)
})
})
Если истекло время ожидания, оно будет обработано в пределах fail
и, таким образом, тест пройден.Если он попадет внутрь then
, то тест не пройден.
Здесь есть еще одна проблема: если несколько маршрутов проверено (cy.wait['route1', 'route2']
) и один из них не существует, то тест будет пройдендаже если одно из утверждений указывает, что оно не должно, например:
it.skip('does not trigger products requests', () => {
Cypress.on('fail', (error, runnable) => {
if (error.message.indexOf('Timed out retrying') !== 0) throw error
})
cy.server()
cy.route({
method: 'POST',
url: '[url]',
}).as('route1')
cy.route({
method: 'POST',
url: '[url]',
}).as('route2')
cy.shortcutThatTriggersRequest()
cy.wait(['@route1', '@route2'], {
requestTimeout: 1000,
}).then((xhrs) => {
assert.isNull(xhrs[0].response.body)
assert.isNull(xhrs[1].response.body)
})
})
проходит, хотя был запрос к одной из этих конечных точек (я предполагаю, что это ошибка, вызванная обработкой onfail
Что нужно сделать, так это утверждения запроса должны быть последовательными:
cy.wait('@route1', {
requestTimeout: 1000,
}).then((xhr) => {
assert.isNull(xhr.response.body)
})
cy.wait('@route2', {
requestTimeout: 1000,
}).then((xhr) => {
assert.isNull(xhr.response.body)
})
Насколько я понимаю, мы не можем проверить тип error
в onfail
, поскольку он всегда CypressError
независимо от того, что вызвало