Skip to content

Commit d58d93d

Browse files
Merge pull request #216 from nicooprat/master
feat: add rule no-debug
2 parents 77f2da9 + 7983175 commit d58d93d

File tree

6 files changed

+108
-1
lines changed

6 files changed

+108
-1
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ You can add rules:
4646
"cypress/no-force": "warn",
4747
"cypress/no-async-tests": "error",
4848
"cypress/no-async-before": "error",
49-
"cypress/no-pause": "error"
49+
"cypress/no-pause": "error",
50+
"cypress/no-debug": "error"
5051
}
5152
}
5253
```
@@ -133,6 +134,7 @@ These rules enforce some of the [best practices recommended for using Cypress](h
133134
| [no-assigning-return-values](docs/rules/no-assigning-return-values.md) | disallow assigning return values of `cy` calls ||
134135
| [no-async-before](docs/rules/no-async-before.md) | disallow using `async`/`await` in Cypress `before` methods | |
135136
| [no-async-tests](docs/rules/no-async-tests.md) | disallow using `async`/`await` in Cypress test cases ||
137+
| [no-debug](docs/rules/no-debug.md) | disallow using `cy.debug()` calls | |
136138
| [no-force](docs/rules/no-force.md) | disallow using `force: true` with action commands | |
137139
| [no-pause](docs/rules/no-pause.md) | disallow using `cy.pause()` calls | |
138140
| [no-unnecessary-waiting](docs/rules/no-unnecessary-waiting.md) | disallow waiting for arbitrary time periods ||

docs/rules/no-debug.md

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Disallow using `cy.debug()` calls (`cypress/no-debug`)
2+
3+
<!-- end auto-generated rule header -->
4+
It is recommended to remove any [cy.debug](https://on.cypress.io/debug) commands before committing specs to avoid other developers getting unexpected results.
5+
6+
## Rule Details
7+
8+
Examples of **incorrect** code for this rule:
9+
10+
```js
11+
cy.debug();
12+
cy.get('selector').debug();
13+
```
14+
15+
Examples of **correct** code for this rule:
16+
17+
```js
18+
cy.get('selector')
19+
```

legacy.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module.exports = {
1111
'require-data-selectors': require('./lib/rules/require-data-selectors'),
1212
'no-force': require('./lib/rules/no-force'),
1313
'no-pause': require('./lib/rules/no-pause'),
14+
'no-debug': require('./lib/rules/no-debug'),
1415
},
1516
configs: {
1617
recommended: require('./lib/config/recommended'),

lib/flat.js

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const plugin = {
1414
'require-data-selectors': require('./rules/require-data-selectors'),
1515
'no-force': require('./rules/no-force'),
1616
'no-pause': require('./rules/no-pause'),
17+
'no-debug': require('./rules/no-debug'),
1718
},
1819
}
1920

lib/rules/no-debug.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
'use strict'
2+
3+
//------------------------------------------------------------------------------
4+
// Rule Definition
5+
//------------------------------------------------------------------------------
6+
7+
module.exports = {
8+
meta: {
9+
type: 'suggestion',
10+
docs: {
11+
description: 'disallow using `cy.debug()` calls',
12+
category: 'Possible Errors',
13+
recommended: false,
14+
url: 'https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-debug.md',
15+
},
16+
fixable: null, // or "code" or "whitespace"
17+
schema: [],
18+
messages: {
19+
unexpected: 'Do not use cy.debug command',
20+
},
21+
},
22+
23+
create (context) {
24+
25+
// variables should be defined here
26+
27+
//----------------------------------------------------------------------
28+
// Helpers
29+
//----------------------------------------------------------------------
30+
function isCallingDebug (node) {
31+
return node.callee &&
32+
node.callee.property &&
33+
node.callee.property.type === 'Identifier' &&
34+
node.callee.property.name === 'debug'
35+
}
36+
37+
function isCypressCall (node) {
38+
if (!node.callee || node.callee.type !== 'MemberExpression') {
39+
return false;
40+
}
41+
if (node.callee.object.type === 'Identifier' && node.callee.object.name === 'cy') {
42+
return true;
43+
}
44+
return isCypressCall(node.callee.object);
45+
}
46+
47+
//----------------------------------------------------------------------
48+
// Public
49+
//----------------------------------------------------------------------
50+
51+
return {
52+
53+
CallExpression (node) {
54+
if (isCypressCall(node) && isCallingDebug(node)) {
55+
context.report({ node, messageId: 'unexpected' })
56+
}
57+
},
58+
59+
}
60+
},
61+
}

tests/lib/rules/no-debug.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict'
2+
3+
const rule = require('../../../lib/rules/no-debug')
4+
const RuleTester = require('eslint').RuleTester
5+
6+
const ruleTester = new RuleTester()
7+
8+
const errors = [{ messageId: 'unexpected' }]
9+
10+
ruleTester.run('no-debug', rule, {
11+
12+
valid: [
13+
{ code: `debug()` },
14+
{ code: `cy.get('button').dblclick()` },
15+
],
16+
17+
invalid: [
18+
{ code: `cy.debug()`, errors },
19+
{ code: `cy.debug({ log: false })`, errors },
20+
{ code: `cy.get('button').debug()`, errors },
21+
{ code: `cy.get('a').should('have.attr', 'href').and('match', /dashboard/).debug()`, errors }
22+
],
23+
})

0 commit comments

Comments
 (0)