我们在CI服务器上运行着一个大型测试套件,并且似乎无法告诉Cypress如果测试失败则退出。它始终运行整个套件。
有一些讨论,在这里,但没有可行的解决方案。
一旦测试失败,是否有可靠的方法可以使赛普拉斯退出?
正如你所提到的,它尚未正式受支持(从3.6.0版开始)。
这是我的一种破解方法(不使用cookie和保持状态的方法):
// cypress/plugins/index.js
let shouldSkip = false;
module.exports = ( on ) => {
on('task', {
resetShouldSkipFlag () {
shouldSkip = false;
return null;
},
shouldSkip ( value ) {
if ( value != null ) shouldSkip = value;
return shouldSkip;
}
});
}
// cypress/support/index.js
function abortEarly () {
if ( this.currentTest.state === 'failed' ) {
return cy.task('shouldSkip', true);
}
cy.task('shouldSkip').then( value => {
if ( value ) this.skip();
});
}
beforeEach(abortEarly);
afterEach(abortEarly);
before(() => {
if ( Cypress.browser.isHeaded ) {
// Reset the shouldSkip flag at the start of a run, so that it
// doesn't carry over into subsequent runs.
// Do this only for headed runs because in headless runs,
// the `before` hook is executed for each spec file.
cy.task('resetShouldSkipFlag');
}
});
一旦遇到故障,将跳过所有进一步的测试。输出将如下所示:
这是一个很好的解决方案,但是绝对应该立即使用它。
同意 无论如何,即使这是一个丑陋的骇客。
嗨,大家好!您知道停止运行其他测试文件的方法吗?因此,一次失败应该停止运行测试的整个过程