Skip to content

Commit 3eb3d2e

Browse files
feat: Support chained wait in no-unnecessary-waiting rule
Catch chained wait
2 parents 475a26c + 9263d51 commit 3eb3d2e

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lib/rules/no-unnecessary-waiting.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,19 @@ module.exports = {
3333
},
3434
}
3535

36+
function nodeIsCalledByCy (node) {
37+
if (node.type === 'Identifier' && node.name === 'cy') return true
38+
39+
if (typeof node.callee === 'undefined' || typeof node.callee.object === 'undefined') {
40+
return false
41+
}
42+
43+
return nodeIsCalledByCy(node.callee.object)
44+
}
45+
3646
function isCallingCyWait (node) {
3747
return node.callee.type === 'MemberExpression' &&
38-
node.callee.object.type === 'Identifier' &&
39-
node.callee.object.name === 'cy' &&
48+
nodeIsCalledByCy(node) &&
4049
node.callee.property.type === 'Identifier' &&
4150
node.callee.property.name === 'wait'
4251
}
@@ -48,6 +57,8 @@ function isNumberArgument (node) {
4857
}
4958

5059
function isIdentifierNumberConstArgument (node, scope) {
60+
if (node.arguments.length === 0) return false
61+
5162
if (node.arguments[0].type !== 'Identifier') return false
5263

5364
const resolvedIdentifier = scope.resolve(node.arguments[0]).resolved

tests/lib/rules/no-unnecessary-waiting.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const parserOptions = { ecmaVersion: 6 }
1010

1111
ruleTester.run('no-unnecessary-waiting', rule, {
1212
valid: [
13+
{ code: 'foo.wait(10)', parserOptions },
14+
1315
{ code: 'cy.wait("@someRequest")', parserOptions },
1416
{ code: 'cy.wait("@someRequest", { log: false })', parserOptions },
1517
{ code: 'cy.wait("@someRequest").then((xhr) => xhr)', parserOptions },
@@ -33,5 +35,9 @@ ruleTester.run('no-unnecessary-waiting', rule, {
3335
{ code: 'const someNumber=500; cy.wait(someNumber)', parserOptions, errors },
3436
{ code: 'function customWait (ms = 1) { cy.wait(ms) }', parserOptions, errors },
3537
{ code: 'const customWait = (ms = 1) => { cy.wait(ms) }', parserOptions, errors },
38+
39+
{ code: 'cy.get(".some-element").wait(10)', parserOptions, errors },
40+
{ code: 'cy.get(".some-element").contains("foo").wait(10)', parserOptions, errors },
41+
{ code: 'const customWait = (ms = 1) => { cy.get(".some-element").wait(ms) }', parserOptions, errors },
3642
],
3743
})

0 commit comments

Comments
 (0)