eslint-plugin-cypress 5.0.0 → 5.1.0
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.
- package/CONTRIBUTING.md +1 -1
- package/lib/flat.js +8 -8
- package/lib/rules/assertion-before-screenshot.js +21 -21
- package/lib/rules/no-assigning-return-values.js +4 -4
- package/lib/rules/no-async-before.js +10 -10
- package/lib/rules/no-async-tests.js +10 -10
- package/lib/rules/no-chained-get.js +32 -32
- package/lib/rules/no-debug.js +18 -19
- package/lib/rules/no-force.js +21 -24
- package/lib/rules/no-pause.js +18 -19
- package/lib/rules/no-unnecessary-waiting.js +13 -13
- package/lib/rules/no-xpath.js +10 -10
- package/lib/rules/require-data-selectors.js +14 -14
- package/lib/rules/unsafe-to-chain-command.js +13 -13
- package/package.json +10 -6
- package/.github/workflows/add-issue-triage-board.yml +0 -12
- package/.github/workflows/triage_closed_issue_comment.yml +0 -9
- package/.husky/pre-commit +0 -1
- package/.node-version +0 -1
- package/.nvmrc +0 -1
- package/ESLINTRC-CONFIG.md +0 -7
- package/FLAT-CONFIG.md +0 -3
- package/circle.yml +0 -137
- package/eslint.config.mjs +0 -26
- package/jest.config.js +0 -6
- package/test-project/README.md +0 -48
- package/test-project/cypress/e2e/1-getting-started/todo.cy.js +0 -143
- package/test-project/cypress/e2e/2-advanced-examples/actions.cy.js +0 -321
- package/test-project/cypress/e2e/2-advanced-examples/aliasing.cy.js +0 -39
- package/test-project/cypress/e2e/2-advanced-examples/assertions.cy.js +0 -176
- package/test-project/cypress/e2e/2-advanced-examples/connectors.cy.js +0 -98
- package/test-project/cypress/e2e/2-advanced-examples/cookies.cy.js +0 -118
- package/test-project/cypress/e2e/2-advanced-examples/cypress_api.cy.js +0 -185
- package/test-project/cypress/e2e/2-advanced-examples/files.cy.js +0 -85
- package/test-project/cypress/e2e/2-advanced-examples/location.cy.js +0 -32
- package/test-project/cypress/e2e/2-advanced-examples/misc.cy.js +0 -90
- package/test-project/cypress/e2e/2-advanced-examples/navigation.cy.js +0 -55
- package/test-project/cypress/e2e/2-advanced-examples/network_requests.cy.js +0 -163
- package/test-project/cypress/e2e/2-advanced-examples/querying.cy.js +0 -114
- package/test-project/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js +0 -204
- package/test-project/cypress/e2e/2-advanced-examples/storage.cy.js +0 -117
- package/test-project/cypress/e2e/2-advanced-examples/traversal.cy.js +0 -121
- package/test-project/cypress/e2e/2-advanced-examples/utilities.cy.js +0 -107
- package/test-project/cypress/e2e/2-advanced-examples/viewport.cy.js +0 -58
- package/test-project/cypress/e2e/2-advanced-examples/waiting.cy.js +0 -30
- package/test-project/cypress/e2e/2-advanced-examples/window.cy.js +0 -22
- package/test-project/cypress/fixtures/example.json +0 -5
- package/test-project/cypress/support/commands.js +0 -25
- package/test-project/cypress/support/e2e.js +0 -17
- package/test-project/cypress.config.js +0 -9
- package/test-project/eslint-configs/eslint.default-deprecated.mjs +0 -11
- package/test-project/eslint-configs/eslint.default.mjs +0 -9
- package/test-project/eslint-configs/eslint.globals.mjs +0 -4
- package/test-project/eslint-configs/eslint.recommended.mjs +0 -9
- package/test-project/eslint.config.mjs +0 -9
- package/test-project/package.json +0 -9
- package/tests/config.js +0 -26
- package/tests/lib/rules/assertion-before-screenshot.js +0 -34
- package/tests/lib/rules/no-assigning-return-values.js +0 -37
- package/tests/lib/rules/no-async-before.js +0 -23
- package/tests/lib/rules/no-async-tests.js +0 -23
- package/tests/lib/rules/no-chained-get.js +0 -31
- package/tests/lib/rules/no-debug.js +0 -23
- package/tests/lib/rules/no-force.js +0 -39
- package/tests/lib/rules/no-pause.js +0 -23
- package/tests/lib/rules/no-unnecessary-waiting.js +0 -47
- package/tests/lib/rules/no-xpath.js +0 -30
- package/tests/lib/rules/require-data-selectors.js +0 -30
- package/tests/lib/rules/unsafe-to-chain-command.js +0 -34
|
@@ -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
|
-
})
|