An ESLint plugin for your Cypress tests.
Note: If you installed ESLint globally then you must also install eslint-plugin-cypress
globally.
npm install eslint-plugin-cypress --save-dev
Add an .eslintrc.json
file to your cypress
directory with the following:
{
"plugins": [
"cypress"
]
}
You can add rules:
{
"rules": {
"cypress/no-assigning-return-values": "error",
"cypress/no-unnecessary-waiting": "error",
"cypress/assertion-before-screenshot": "warn",
}
}
You can whitelist globals provided by Cypress:
{
"env": {
"cypress/globals": true
}
}
Use the recommended configuration and you can forego configuring plugins, rules, and env individually. See below for which rules are included.
{
"extends": [
"plugin:cypress/recommended"
]
}
These rules enforce some of the best practices recommended for using Cypress.
Rules with a check mark (✅) are enabled by default while using the plugin:cypress/recommended
config.
NOTE: These rules currently require eslint 5.0 or greater. If you would like support added for eslint 4.x, please 👍 this issue.
Rule ID | Description | |
---|---|---|
✅ | no-assigning-return-values | Prevent assigning return values of cy calls |
✅ | no-unnecessary-waiting | Prevent waiting for arbitrary time periods |
assertion-before-screenshot | Ensure screenshots are preceded by an assertion |
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
}
}
To add a new rule:
- Fork and clone this repository
- Generate a new rule (a yeoman generator is available)
- Run
yarn start
ornpm start
- Write test scenarios then implement logic
- Describe the rule in the generated
docs
file - Make sure all tests are passing
- Add the rule to this README
- Create a PR
Use the following commit message conventions: https://github.com/semantic-release/semantic-release#commit-message-format