This document supplements the README document and describes how to use the Cypress ESLint Plugin (eslint-plugin-cypress
) in a deprecated ESLint legacy config environment. The use of flat configurations with this plugin is described in the README document.
Usage with ESLint 9.x
is described.
The use of eslintrc
configurations with eslint-plugin-cypress
is deprecated and support will be removed in a future version of this plugin. This is tied in to the ESLint announcement in the blog post Flat config rollout plans from October 2023 which describes that the eslintrc
configuration system is planned to be removed in the future ESLint v10.0.0
. Users are encouraged to migrate to using a flat configuration.
Use a minimum ESLint 9.x
.
npm install eslint eslint-plugin-cypress --save-dev
or
yarn add eslint eslint-plugin-cypress --dev
To use a deprecated configuration with ESLint v9
, such as .eslintrc.json
, you must set the ESLINT_USE_FLAT_CONFIG
environment variable to false
(see ESLint v9 > Configuration Files (Deprecated)). The following examples use json
format for the content of the configuration file:
{
"plugins": [
"cypress"
]
}
You can add rules - see Rules for a list of the available rules:
{
"rules": {
"cypress/no-assigning-return-values": "error",
"cypress/no-unnecessary-waiting": "error",
"cypress/assertion-before-screenshot": "warn",
"cypress/no-force": "warn",
"cypress/no-async-tests": "error",
"cypress/no-async-before": "error",
"cypress/no-pause": "error",
"cypress/no-debug": "error"
}
}
You can allow certain globals provided by Cypress:
{
"env": {
"cypress/globals": true
}
}
Use the recommended configuration and you can forego configuring plugins, rules, and env individually. See Rules for which rules are included in the recommended configuration.
{
"extends": [
"plugin:cypress/recommended"
]
}
See the Rules list in the main README document.
Cypress is built on top of Mocha and Chai. See the following sections for information on using ESLint plugins eslint-plugin-mocha and eslint-plugin-chai-friendly together with eslint-plugin-cypress
.
During test spec development, Mocha exclusive tests .only
or Mocha inclusive tests .skip
may be used to control which tests are executed, as described in the Cypress documentation Excluding and Including Tests. To apply corresponding rules, you can install and use eslint-plugin-mocha. The rule mocha/no-exclusive-tests detects the use of .only
and the mocha/no-skipped-tests rule detects the use of .skip
:
npm install --save-dev eslint-plugin-mocha
In your .eslintrc.json
:
{
"plugins": [
"cypress",
"mocha"
],
"rules": {
"mocha/no-exclusive-tests": "warn",
"mocha/no-skipped-tests": "warn"
}
}
Or you can simply use the cypress/recommended
and mocha/recommended
configurations together, for example:
{
"extends": [
"plugin:cypress/recommended",
"plugin:mocha/recommended"
]
}
Using an assertion such as expect(value).to.be.true
can fail the ESLint rule no-unused-expressions
even though it's not an error in this case. To fix this, you can install and use eslint-plugin-chai-friendly.
npm install --save-dev eslint-plugin-chai-friendly
In your .eslintrc.json
:
{
"plugins": [
"cypress",
"chai-friendly"
],
"rules": {
"no-unused-expressions": 0,
"chai-friendly/no-unused-expressions": 2
}
}
Or you can simply add its recommended
config:
{
"extends": ["plugin:chai-friendly/recommended"]
}