我正在cypress中编写Web应用程序的端到端测试,如果这些应用程序发送任何带有http 500错误响应的请求,我希望cypress无法通过测试。
我正在3.1.5版中使用cypress。我已经尝试了以下方法,但是遇到了Promise错误。
cy.server();
cy.route({
url: '**',
onResponse: (xhr) => {
cy.log(xhr);
}
});
我希望找到一个解决该问题的更优雅的方法,因为在我看来这听起来像是一个非常标准的用例。
答案 0 :(得分:1)
尝试使用以下代码参考 doc
cy.intercept('**').as('all')
cy.wait('@all').its('response.statusCode').should('not.be.oneOf', [500])
或
使用 - should('be.oneOf', [200,300])
检查状态代码 cy.wait('@all').its('response.statusCode').should('be.oneOf', [200,300])
答案 1 :(得分:0)
不确定是否有某种规范的方法,但是您可以猴子修补XMLHttpRequest
API并引发>= 500
状态响应。
如果您的应用程序使用Fetch API,SendBeacon或其他功能,则可以执行类似的操作。
// put this in support/index.js
Cypress.on('window:before:load', win => {
const origSend = win.XMLHttpRequest.prototype.send;
win.XMLHttpRequest.prototype.send = function () {
// deferring because your app may be using an abstraction (jquery),
// which may set this handler *after* it sets the `send` handler
setTimeout(() => {
const origHandler = this.onreadystatechange;
this.onreadystatechange = function () {
if ( this.readyState === 4 && this.status >= 500 ) {
throw new Error(`Server responded to "${this.url}" with ${this.status}`);
}
if ( origHandler ) {
return origHandler.apply(this, arguments);
}
};
return origSend.apply(this, arguments);
});
};
});
WTBS,它不是很有用,因为您的应用可能想代替处理500
,但这会阻止它。
更好的解决方案是确保您的应用仅引发未处理的500个响应。
答案 2 :(得分:0)
您可以在应要求内抛出错误,这应该可以解决。
cy.server();
cy.route({
url: '**',
onResponse: (xhr) => {
if(xhr.status === 500) {
throw new Error('Failing test caused by a unhandled request with status 500')
}
cy.log(xhr);
}
})