一旦测试失败,是否有可靠的方法让赛普拉斯退出?

Und*_*ion 4 javascript testing continuous-integration cypress

我们有一个在 CI 服务器上运行的大型测试套件,如果测试失败,似乎无法告诉 Cypress 退出。它始终运行整个套件。

有一些讨论,在这里,但没有可行的解决方案。

一旦测试失败,是否有可靠的方法让赛普拉斯退出?

dwe*_*lle 7

正如您所提到的,它还没有得到官方支持(从 3.6.0 开始)。

这是我对 hack 的看法(使用 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;
    }
  });
}
Run Code Online (Sandbox Code Playgroud)
// 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');
  }
});
Run Code Online (Sandbox Code Playgroud)

一旦遇到故障,将跳过所有进一步的测试。输出将如下所示:

在此处输入图片说明

  • 这是一个很好的解决方案,但是绝对应该支持开箱即用。 (2认同)

Jav*_*rea 5

您也可以使用此 Cypress 插件,同时 Cypress 本身不支持此功能:https : //www.npmjs.com/package/cypress-fail-fast

将插件添加到 devDependencies:

npm i --save-dev cypress-fail-fast
Run Code Online (Sandbox Code Playgroud)

在 cypress/plugins/index.js 里面:

module.exports = (on, config) => {
  require("cypress-fail-fast/plugin")(on, config);
  return config;
};
Run Code Online (Sandbox Code Playgroud)

在 cypress/support/index.js 的顶部:

import "cypress-fail-fast";
Run Code Online (Sandbox Code Playgroud)

  • 您好@AlexandrZavalii,这不是插件的预期行为。来自[其文档](https://github.com/javierbrea/cypress-fail-fast):“如果一个测试在最后一次重试后失败,则其余测试将被跳过”,并且有一个屏幕截图显示了它是如何进行的也跳过其余文件中的测试。如果插件不适合您,也许您应该在插件存储库中[打开一个问题](https://github.com/javierbrea/cypress-fail-fast/issues/25)。;) (2认同)
  • @MithunShreevatsa,您好,如果配置正确,该插件不应跳过其他测试套件文件。您应该将“FAIL_FAST_STRATEGY”设置为“spec”。但这仅适用于 Cypress 无头模式。在 Cypress 主导模式下,无法区分一个测试套件与另一个测试套件(据我所知),因此会跳过所有测试。如果即使配置正确,它也无法在无头模式下工作,那么插件中就会存在错误,我们应该在相关的 Github 问题中继续讨论它。无论如何,感谢您的反馈:) (2认同)