eslint-plugin-cypress 5.0.1 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CONTRIBUTING.md +25 -23
  2. package/README.md +22 -17
  3. package/docs/rules/assertion-before-screenshot.md +6 -5
  4. package/docs/rules/no-assigning-return-values.md +1 -0
  5. package/docs/rules/no-async-before.md +7 -8
  6. package/docs/rules/no-async-tests.md +8 -9
  7. package/docs/rules/no-chained-get.md +2 -2
  8. package/docs/rules/no-debug.md +3 -2
  9. package/docs/rules/no-force.md +14 -13
  10. package/docs/rules/no-pause.md +3 -2
  11. package/docs/rules/no-unnecessary-waiting.md +1 -0
  12. package/docs/rules/no-xpath.md +2 -2
  13. package/docs/rules/require-data-selectors.md +14 -4
  14. package/docs/rules/unsafe-to-chain-command.md +2 -1
  15. package/lib/rules/require-data-selectors.js +39 -8
  16. package/lib/rules/unsafe-to-chain-command.js +1 -1
  17. package/package.json +9 -1
  18. package/.github/workflows/add-issue-triage-board.yml +0 -12
  19. package/.github/workflows/triage_closed_issue_comment.yml +0 -9
  20. package/.husky/pre-commit +0 -1
  21. package/.node-version +0 -1
  22. package/.nvmrc +0 -1
  23. package/ESLINTRC-CONFIG.md +0 -7
  24. package/FLAT-CONFIG.md +0 -3
  25. package/circle.yml +0 -137
  26. package/eslint.config.mjs +0 -33
  27. package/test-project/README.md +0 -48
  28. package/test-project/cypress/e2e/1-getting-started/todo.cy.js +0 -143
  29. package/test-project/cypress/e2e/2-advanced-examples/actions.cy.js +0 -321
  30. package/test-project/cypress/e2e/2-advanced-examples/aliasing.cy.js +0 -39
  31. package/test-project/cypress/e2e/2-advanced-examples/assertions.cy.js +0 -176
  32. package/test-project/cypress/e2e/2-advanced-examples/connectors.cy.js +0 -98
  33. package/test-project/cypress/e2e/2-advanced-examples/cookies.cy.js +0 -118
  34. package/test-project/cypress/e2e/2-advanced-examples/cypress_api.cy.js +0 -185
  35. package/test-project/cypress/e2e/2-advanced-examples/files.cy.js +0 -85
  36. package/test-project/cypress/e2e/2-advanced-examples/location.cy.js +0 -32
  37. package/test-project/cypress/e2e/2-advanced-examples/misc.cy.js +0 -90
  38. package/test-project/cypress/e2e/2-advanced-examples/navigation.cy.js +0 -55
  39. package/test-project/cypress/e2e/2-advanced-examples/network_requests.cy.js +0 -163
  40. package/test-project/cypress/e2e/2-advanced-examples/querying.cy.js +0 -114
  41. package/test-project/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js +0 -204
  42. package/test-project/cypress/e2e/2-advanced-examples/storage.cy.js +0 -117
  43. package/test-project/cypress/e2e/2-advanced-examples/traversal.cy.js +0 -121
  44. package/test-project/cypress/e2e/2-advanced-examples/utilities.cy.js +0 -107
  45. package/test-project/cypress/e2e/2-advanced-examples/viewport.cy.js +0 -58
  46. package/test-project/cypress/e2e/2-advanced-examples/waiting.cy.js +0 -30
  47. package/test-project/cypress/e2e/2-advanced-examples/window.cy.js +0 -22
  48. package/test-project/cypress/fixtures/example.json +0 -5
  49. package/test-project/cypress/support/commands.js +0 -25
  50. package/test-project/cypress/support/e2e.js +0 -17
  51. package/test-project/cypress.config.js +0 -9
  52. package/test-project/eslint-configs/eslint.default-deprecated.mjs +0 -11
  53. package/test-project/eslint-configs/eslint.default.mjs +0 -9
  54. package/test-project/eslint-configs/eslint.globals.mjs +0 -4
  55. package/test-project/eslint-configs/eslint.recommended.mjs +0 -9
  56. package/test-project/eslint.config.mjs +0 -9
  57. package/test-project/package.json +0 -9
  58. package/tests/config.js +0 -26
  59. package/tests/lib/rules/assertion-before-screenshot.js +0 -34
  60. package/tests/lib/rules/no-assigning-return-values.js +0 -37
  61. package/tests/lib/rules/no-async-before.js +0 -23
  62. package/tests/lib/rules/no-async-tests.js +0 -23
  63. package/tests/lib/rules/no-chained-get.js +0 -31
  64. package/tests/lib/rules/no-debug.js +0 -23
  65. package/tests/lib/rules/no-force.js +0 -39
  66. package/tests/lib/rules/no-pause.js +0 -23
  67. package/tests/lib/rules/no-unnecessary-waiting.js +0 -47
  68. package/tests/lib/rules/no-xpath.js +0 -30
  69. package/tests/lib/rules/require-data-selectors.js +0 -30
  70. package/tests/lib/rules/unsafe-to-chain-command.js +0 -34
  71. package/vitest.config.mts +0 -8
@@ -1,39 +0,0 @@
1
- 'use strict'
2
-
3
- const rule = require('../../../lib/rules/no-force')
4
- const RuleTester = require('eslint').RuleTester
5
-
6
- const ruleTester = new RuleTester()
7
-
8
- const errors = [{ messageId: 'unexpected' }]
9
-
10
- ruleTester.run('no-force', rule, {
11
-
12
- valid: [
13
- { code: 'cy.get(\'button\').click()' },
14
- { code: 'cy.get(\'button\').click({multiple: true})' },
15
- { code: 'cy.get(\'button\').dblclick()' },
16
- { code: 'cy.get(\'input\').type(\'somth\')' },
17
- { code: 'cy.get(\'input\').type(\'somth\', {anyoption: true})' },
18
- { code: 'cy.get(\'input\').trigger(\'click\', {anyoption: true})' },
19
- { code: 'cy.get(\'input\').rightclick({anyoption: true})' },
20
- { code: 'cy.get(\'input\').check()' },
21
- { code: 'cy.get(\'input\').select()' },
22
- { code: 'cy.get(\'input\').focus()' },
23
- { code: 'cy.document().trigger("keydown", { ...event })' },
24
- ],
25
-
26
- invalid: [
27
- { code: 'cy.get(\'button\').click({force: true})', errors },
28
- { code: 'cy.get(\'button\').dblclick({force: true})', errors },
29
- { code: 'cy.get(\'input\').type(\'somth\', {force: true})', errors },
30
- { code: 'cy.get(\'div\').find(\'.foo\').type(\'somth\', {force: true})', errors },
31
- { code: 'cy.get(\'div\').find(\'.foo\').find(\'.bar\').click({force: true})', errors },
32
- { code: 'cy.get(\'div\').find(\'.foo\').find(\'.bar\').trigger(\'change\', {force: true})', errors },
33
- { code: 'cy.get(\'input\').trigger(\'click\', {force: true})', errors },
34
- { code: 'cy.get(\'input\').rightclick({force: true})', errors },
35
- { code: 'cy.get(\'input\').check({force: true})', errors },
36
- { code: 'cy.get(\'input\').select({force: true})', errors },
37
- { code: 'cy.get(\'input\').focus({force: true})', errors },
38
- ],
39
- })
@@ -1,23 +0,0 @@
1
- 'use strict'
2
-
3
- const rule = require('../../../lib/rules/no-pause')
4
- const RuleTester = require('eslint').RuleTester
5
-
6
- const ruleTester = new RuleTester()
7
-
8
- const errors = [{ messageId: 'unexpected' }]
9
-
10
- ruleTester.run('no-pause', rule, {
11
-
12
- valid: [
13
- { code: 'pause()' },
14
- { code: 'cy.get(\'button\').dblclick()' },
15
- ],
16
-
17
- invalid: [
18
- { code: 'cy.pause()', errors },
19
- { code: 'cy.pause({ log: false })', errors },
20
- { code: 'cy.get(\'button\').pause()', errors },
21
- { code: 'cy.get(\'a\').should(\'have.attr\', \'href\').and(\'match\', /dashboard/).pause()', errors },
22
- ],
23
- })
@@ -1,47 +0,0 @@
1
- 'use strict'
2
-
3
- const rule = require('../../../lib/rules/no-unnecessary-waiting')
4
- const RuleTester = require('eslint').RuleTester
5
-
6
- const ruleTester = new RuleTester()
7
-
8
- const errors = [{ messageId: 'unexpected' }]
9
-
10
- ruleTester.run('no-unnecessary-waiting', rule, {
11
- valid: [
12
- { code: 'foo.wait(10)' },
13
-
14
- { code: 'cy.wait("@someRequest")' },
15
- { code: 'cy.wait("@someRequest", { log: false })' },
16
- { code: 'cy.wait("@someRequest").then((xhr) => xhr)' },
17
- { code: 'cy.wait(["@someRequest", "@anotherRequest"])' },
18
-
19
- { code: 'cy.clock(5000)' },
20
- { code: 'cy.scrollTo(0, 10)' },
21
- { code: 'cy.tick(500)' },
22
-
23
- { code: 'const someRequest="@someRequest"; cy.wait(someRequest)' },
24
- { code: 'function customWait (alias = "@someRequest") { cy.wait(alias) }' },
25
- { code: 'const customWait = (alias = "@someRequest") => { cy.wait(alias) }' },
26
- { code: 'function customWait (ms) { cy.wait(ms) }' },
27
- { code: 'const customWait = (ms) => { cy.wait(ms) }' },
28
-
29
- { code: 'import BAR_BAZ from "bar-baz"; cy.wait(BAR_BAZ)' },
30
- { code: 'import { FOO_BAR } from "foo-bar"; cy.wait(FOO_BAR)' },
31
- { code: 'import * as wildcard from "wildcard"; cy.wait(wildcard.value)' },
32
- { code: 'import { NAME as OTHER_NAME } from "rename"; cy.wait(OTHER_NAME)' },
33
- ],
34
-
35
- invalid: [
36
- { code: 'cy.wait(0)', errors },
37
- { code: 'cy.wait(100)', errors },
38
- { code: 'cy.wait(5000)', errors },
39
- { code: 'const someNumber=500; cy.wait(someNumber)', errors },
40
- { code: 'function customWait (ms = 1) { cy.wait(ms) }', errors },
41
- { code: 'const customWait = (ms = 1) => { cy.wait(ms) }', errors },
42
-
43
- { code: 'cy.get(".some-element").wait(10)', errors },
44
- { code: 'cy.get(".some-element").contains("foo").wait(10)', errors },
45
- { code: 'const customWait = (ms = 1) => { cy.get(".some-element").wait(ms) }', errors },
46
- ],
47
- })
@@ -1,30 +0,0 @@
1
- 'use strict'
2
-
3
- // ------------------------------------------------------------------------------
4
- // Requirements
5
- // ------------------------------------------------------------------------------
6
-
7
- const rule = require('../../../lib/rules/no-xpath'),
8
- RuleTester = require('eslint').RuleTester
9
-
10
- // ------------------------------------------------------------------------------
11
- // Tests
12
- // ------------------------------------------------------------------------------
13
-
14
- const ruleTester = new RuleTester()
15
- ruleTester.run('no-xpath', rule, {
16
- valid: [
17
- { code: 'cy.get("button").click({force: true})' },
18
- ],
19
-
20
- invalid: [
21
- {
22
- code: 'cy.xpath(\'//div[@class="container"]/p[1]\').click()',
23
- errors: [{ messageId: 'unexpected' }],
24
- },
25
- {
26
- code: 'cy.xpath(\'//p[1]\').should(\'exist\')',
27
- errors: [{ messageId: 'unexpected' }],
28
- },
29
- ],
30
- })
@@ -1,30 +0,0 @@
1
- 'use strict'
2
-
3
- const rule = require('../../../lib/rules/require-data-selectors')
4
- const RuleTester = require('eslint').RuleTester
5
-
6
- const ruleTester = new RuleTester()
7
-
8
- const errors = [{ messageId: 'unexpected' }]
9
-
10
- ruleTester.run('require-data-selectors', rule, {
11
- valid: [
12
- { code: 'cy.get(\'[data-cy=submit]\').click()' },
13
- { code: 'cy.get(\'[data-QA=submit]\')' },
14
- { code: 'cy.clock(5000)' },
15
- { code: 'cy.scrollTo(0, 10)' },
16
- { code: 'cy.tick(500)' },
17
- { code: 'cy.get(\`[data-cy=${1}]\`)' }, // eslint-disable-line no-useless-escape
18
- { code: 'cy.get("@my-alias")' },
19
- { code: 'cy.get(`@my-alias`)' },
20
- ],
21
-
22
- invalid: [
23
- { code: 'cy.get(\'[daedta-cy=submit]\').click()', errors },
24
- { code: 'cy.get(\'[d-cy=submit]\')', errors },
25
- { code: 'cy.get(".btn-large").click()', errors },
26
- { code: 'cy.get(".btn-.large").click()', errors },
27
- { code: 'cy.get(".a")', errors },
28
- { code: 'cy.get(\`[daedta-cy=${1}]\`)', errors }, // eslint-disable-line no-useless-escape
29
- ],
30
- })
@@ -1,34 +0,0 @@
1
- 'use strict'
2
-
3
- const rule = require('../../../lib/rules/unsafe-to-chain-command')
4
- const RuleTester = require('eslint').RuleTester
5
-
6
- const ruleTester = new RuleTester()
7
-
8
- const errors = [{ messageId: 'unexpected' }]
9
-
10
- ruleTester.run('action-ends-chain', rule, {
11
- valid: [
12
- {
13
- code: 'cy.get("new-todo").type("todo A{enter}"); cy.get("new-todo").type("todo B{enter}"); cy.get("new-todo").should("have.class", "active");',
14
- },
15
- { code: 'cy.focused().should("be.visible");' },
16
- { code: 'cy.submitBtn().click();' },
17
- ],
18
-
19
- invalid: [
20
- { code: 'cy.get("new-todo").type("todo A{enter}").should("have.class", "active");', errors },
21
- { code: 'cy.get("new-todo").type("todo A{enter}").type("todo B{enter}");', errors },
22
- { code: 'cy.get("new-todo").focus().should("have.class", "active");', errors },
23
- {
24
- code: 'cy.get("new-todo").customType("todo A{enter}").customClick();',
25
- options: [{ methods: ['customType', 'customClick'] }],
26
- errors,
27
- },
28
- {
29
- code: 'cy.get("new-todo").customPress("Enter").customScroll();',
30
- options: [{ methods: ['customPress', 'customScroll'] }],
31
- errors,
32
- },
33
- ],
34
- })
package/vitest.config.mts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
-
3
- export default defineConfig({
4
- test: {
5
- include: ['**/tests/**/*.[jt]s?(x)'],
6
- globals: true
7
- },
8
- })