kuceb / cypress-plugin-retries

A Cypress plugin to retry failed tests.
MIT License
237 stars 20 forks source link

Update 08/25/20:

Test retries has made it to Cypress core! Please upgrade to 5.0.0 and remove this plugin

Migrating from cypress-plugin-retries to Cypress 5.0.0:

See the 5.0 migration guide

// or on a suite describe('suite title', { retries: 2 }, () => { ... })

- To enable retries globally, set `retries` in `cypress.json` instead of using `Cypress.env('RETRIES')` e.g.:
```js
{ 
  "retries": { "openMode": 0, "runMode": 2 }
}

cypress-plugin-retries

A Cypress plugin to retry failed tests

Please report bugs in the issues of this repo.

Installation

Add the plugin to devDependencies

npm install -D cypress-plugin-retries

At the top of cypress/support/index.js:

require('cypress-plugin-retries')

Optional Installation

To enable retry logging in the terminal alongside mocha output
Inside cypress/plugins/index.js:

module.exports = (on, config) => {
  require('cypress-plugin-retries/lib/plugin')(on)
}

example output:

Usage

Use the environment variable CYPRESS_RETRIES to set the retry number for all spec files:

CYPRESS_RETRIES=2 npm run cypress

or Set the "env" key in your cypress.json configuration file to set the retry number for all spec files:

{
  "env":
  {
    "RETRIES": 2
  }
}

or On a per-test or per-hook basis, set the retry number:

Note: this plugin adds Cypress.currentTest and you should only access it in the context of this plugin.

it('test', () => {
Cypress.currentTest.retries(2)
})

or [undesirable] Use mocha's this.retries(n) inside of a test: Note: must use function() notation, not arrows ()=>{}

it('test', function() {
this.retries(2)
})

FAQ

Conditional Logic based on currentRetry number? https://github.com/Bkucera/cypress-plugin-retries/issues/32
add a wait before the next retry? https://github.com/Bkucera/cypress-plugin-retries/issues/52

How it works

Extra Configuration

License

MIT