Skip to content

Commit aa5ce37

Browse files
Merge pull request #207 from MikeMcC399/migrate/ruletester-v9
chore: migrate to RuleTester v9
2 parents 0fb820d + d500827 commit aa5ce37

10 files changed

+158
-215
lines changed

circle.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ workflows:
77
- lint
88
- test-v7
99
- test-v8
10+
- test-v9
1011
- release:
1112
requires:
1213
- lint
1314
- test-v7
1415
- test-v8
16+
- test-v9
1517
filters:
1618
branches:
1719
only:
@@ -72,6 +74,24 @@ jobs:
7274
name: Test ESLint 8
7375
command: npm run test:legacy
7476

77+
test-v9:
78+
docker:
79+
- image: cimg/node:20.12.2
80+
steps:
81+
- checkout
82+
- run:
83+
name: Install dependencies
84+
command: npm ci
85+
- run:
86+
name: Install ESLint 9
87+
command: npm install eslint@9
88+
- run:
89+
name: Show ESLint version
90+
command: npx eslint --version
91+
- run:
92+
name: Test ESLint 9
93+
command: npm test
94+
7595
release:
7696
docker:
7797
- image: cimg/node:20.12.2

tests/lib/rules/assertion-before-screenshot.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,29 @@ const RuleTester = require('eslint').RuleTester
66
const ruleTester = new RuleTester()
77

88
const errors = [{ messageId: 'unexpected' }]
9-
const parserOptions = { ecmaVersion: 6 }
109

1110
ruleTester.run('assertion-before-screenshot', rule, {
1211
valid: [
13-
{ code: 'cy.get(".some-element"); cy.screenshot();', parserOptions },
14-
{ code: 'cy.get(".some-element").should("exist").screenshot();', parserOptions },
15-
{ code: 'cy.get(".some-element").should("exist").screenshot().click()', parserOptions, errors },
16-
{ code: 'cy.get(".some-element").should("exist"); if(true) cy.screenshot();', parserOptions },
17-
{ code: 'if(true) { cy.get(".some-element").should("exist"); cy.screenshot(); }', parserOptions },
18-
{ code: 'cy.get(".some-element").should("exist"); if(true) { cy.screenshot(); }', parserOptions },
19-
{ code: 'const a = () => { cy.get(".some-element").should("exist"); cy.screenshot(); }', parserOptions, errors },
20-
{ code: 'cy.get(".some-element").should("exist").and("be.visible"); cy.screenshot();', parserOptions },
21-
{ code: 'cy.get(".some-element").contains("Text"); cy.screenshot();', parserOptions },
12+
{ code: 'cy.get(".some-element"); cy.screenshot();' },
13+
{ code: 'cy.get(".some-element").should("exist").screenshot();' },
14+
{ code: 'cy.get(".some-element").should("exist").screenshot().click()' },
15+
{ code: 'cy.get(".some-element").should("exist"); if(true) cy.screenshot();' },
16+
{ code: 'if(true) { cy.get(".some-element").should("exist"); cy.screenshot(); }' },
17+
{ code: 'cy.get(".some-element").should("exist"); if(true) { cy.screenshot(); }' },
18+
{ code: 'const a = () => { cy.get(".some-element").should("exist"); cy.screenshot(); }' },
19+
{ code: 'cy.get(".some-element").should("exist").and("be.visible"); cy.screenshot();' },
20+
{ code: 'cy.get(".some-element").contains("Text"); cy.screenshot();' },
2221
],
2322

2423
invalid: [
25-
{ code: 'cy.screenshot()', parserOptions, errors },
26-
{ code: 'cy.visit("somepage"); cy.screenshot();', parserOptions, errors },
27-
{ code: 'cy.custom(); cy.screenshot()', parserOptions, errors },
28-
{ code: 'cy.get(".some-element").click(); cy.screenshot()', parserOptions, errors },
29-
{ code: 'cy.get(".some-element").click().screenshot()', parserOptions, errors },
30-
{ code: 'if(true) { cy.get(".some-element").click(); cy.screenshot(); }', parserOptions, errors },
31-
{ code: 'cy.get(".some-element").click(); if(true) { cy.screenshot(); }', parserOptions, errors },
32-
{ code: 'cy.get(".some-element"); function a() { cy.screenshot(); }', parserOptions, errors },
33-
{ code: 'cy.get(".some-element"); const a = () => { cy.screenshot(); }', parserOptions, errors },
24+
{ code: 'cy.screenshot()', errors },
25+
{ code: 'cy.visit("somepage"); cy.screenshot();', errors },
26+
{ code: 'cy.custom(); cy.screenshot()', errors },
27+
{ code: 'cy.get(".some-element").click(); cy.screenshot()', errors },
28+
{ code: 'cy.get(".some-element").click().screenshot()', errors },
29+
{ code: 'if(true) { cy.get(".some-element").click(); cy.screenshot(); }', errors },
30+
{ code: 'cy.get(".some-element").click(); if(true) { cy.screenshot(); }', errors },
31+
{ code: 'cy.get(".some-element"); function a() { cy.screenshot(); }', errors },
32+
{ code: 'cy.get(".some-element"); const a = () => { cy.screenshot(); }', errors },
3433
],
3534
})

tests/lib/rules/no-assigning-return-values.js

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,32 @@ const RuleTester = require('eslint').RuleTester
66
const ruleTester = new RuleTester()
77

88
const errors = [{ messageId: 'unexpected' }]
9-
const parserOptions = { ecmaVersion: 6 }
109

1110
ruleTester.run('no-assigning-return-values', rule, {
1211
valid: [
13-
{ code: 'var foo = true;', parserOptions },
14-
{ code: 'let foo = true;', parserOptions },
15-
{ code: 'const foo = true;', parserOptions },
16-
{ code: 'const foo = bar();', parserOptions },
17-
{ code: 'const foo = bar().baz();', parserOptions },
18-
{ code: 'const spy = cy.spy();', parserOptions },
19-
{ code: 'const spy = cy.spy().as();', parserOptions },
20-
{ code: 'const stub = cy.stub();', parserOptions },
21-
{ code: 'const result = cy.now();', parserOptions },
22-
{ code: 'const state = cy.state();', parserOptions },
23-
{ code: 'cy.get("foo");', parserOptions },
24-
{ code: 'cy.contains("foo").click();', parserOptions },
12+
{ code: 'var foo = true;' },
13+
{ code: 'let foo = true;' },
14+
{ code: 'const foo = true;' },
15+
{ code: 'const foo = bar();' },
16+
{ code: 'const foo = bar().baz();' },
17+
{ code: 'const spy = cy.spy();' },
18+
{ code: 'const spy = cy.spy().as();' },
19+
{ code: 'const stub = cy.stub();' },
20+
{ code: 'const result = cy.now();' },
21+
{ code: 'const state = cy.state();' },
22+
{ code: 'cy.get("foo");' },
23+
{ code: 'cy.contains("foo").click();' },
2524
],
2625

2726
invalid: [
28-
{ code: 'let a = cy.get("foo")', parserOptions, errors },
29-
{ code: 'const a = cy.get("foo")', parserOptions, errors },
30-
{ code: 'var a = cy.get("foo")', parserOptions, errors },
27+
{ code: 'let a = cy.get("foo")', errors },
28+
{ code: 'const a = cy.get("foo")', errors },
29+
{ code: 'var a = cy.get("foo")', errors },
3130

32-
{ code: 'let a = cy.contains("foo")', parserOptions, errors },
33-
{ code: 'let a = cy.window()', parserOptions, errors },
34-
{ code: 'let a = cy.wait("@something")', parserOptions, errors },
31+
{ code: 'let a = cy.contains("foo")', errors },
32+
{ code: 'let a = cy.window()', errors },
33+
{ code: 'let a = cy.wait("@something")', errors },
3534

36-
{ code: 'let a = cy.contains("foo").click()', parserOptions, errors },
35+
{ code: 'let a = cy.contains("foo").click()', errors },
3736
],
3837
})

tests/lib/rules/no-async-before.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,18 @@ const RuleTester = require('eslint').RuleTester
66
const ruleTester = new RuleTester()
77

88
const errors = [{ messageId: 'unexpected' }]
9-
// async functions are an ES2017 feature
10-
const parserOptions = { ecmaVersion: 8 }
119

1210
ruleTester.run('no-async-before', rule, {
1311
valid: [
14-
{ code: 'before(\'a before case\', () => { cy.get(\'.someClass\'); })', parserOptions },
15-
{ code: 'before(\'a before case\', async () => { await somethingAsync(); })', parserOptions },
16-
{ code: 'async function nonTestFn () { return await somethingAsync(); }', parserOptions },
17-
{ code: 'const nonTestArrowFn = async () => { await somethingAsync(); }', parserOptions },
12+
{ code: 'before(\'a before case\', () => { cy.get(\'.someClass\'); })' },
13+
{ code: 'before(\'a before case\', async () => { await somethingAsync(); })' },
14+
{ code: 'async function nonTestFn () { return await somethingAsync(); }' },
15+
{ code: 'const nonTestArrowFn = async () => { await somethingAsync(); }' },
1816
],
1917
invalid: [
20-
{ code: 'before(\'a test case\', async () => { cy.get(\'.someClass\'); })', parserOptions, errors },
21-
{ code: 'beforeEach(\'a test case\', async () => { cy.get(\'.someClass\'); })', parserOptions, errors },
22-
{ code: 'before(\'a test case\', async function () { cy.get(\'.someClass\'); })', parserOptions, errors },
23-
{ code: 'beforeEach(\'a test case\', async function () { cy.get(\'.someClass\'); })', parserOptions, errors },
18+
{ code: 'before(\'a test case\', async () => { cy.get(\'.someClass\'); })', errors },
19+
{ code: 'beforeEach(\'a test case\', async () => { cy.get(\'.someClass\'); })', errors },
20+
{ code: 'before(\'a test case\', async function () { cy.get(\'.someClass\'); })', errors },
21+
{ code: 'beforeEach(\'a test case\', async function () { cy.get(\'.someClass\'); })', errors },
2422
],
2523
})

tests/lib/rules/no-async-tests.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,18 @@ const RuleTester = require('eslint').RuleTester
66
const ruleTester = new RuleTester()
77

88
const errors = [{ messageId: 'unexpected' }]
9-
// async functions are an ES2017 feature
10-
const parserOptions = { ecmaVersion: 8 }
119

1210
ruleTester.run('no-async-tests', rule, {
1311
valid: [
14-
{ code: 'it(\'a test case\', () => { cy.get(\'.someClass\'); })', parserOptions },
15-
{ code: 'it(\'a test case\', async () => { await somethingAsync(); })', parserOptions },
16-
{ code: 'async function nonTestFn () { return await somethingAsync(); }', parserOptions },
17-
{ code: 'const nonTestArrowFn = async () => { await somethingAsync(); }', parserOptions },
12+
{ code: 'it(\'a test case\', () => { cy.get(\'.someClass\'); })' },
13+
{ code: 'it(\'a test case\', async () => { await somethingAsync(); })' },
14+
{ code: 'async function nonTestFn () { return await somethingAsync(); }' },
15+
{ code: 'const nonTestArrowFn = async () => { await somethingAsync(); }' },
1816
],
1917
invalid: [
20-
{ code: 'it(\'a test case\', async () => { cy.get(\'.someClass\'); })', parserOptions, errors },
21-
{ code: 'test(\'a test case\', async () => { cy.get(\'.someClass\'); })', parserOptions, errors },
22-
{ code: 'it(\'a test case\', async function () { cy.get(\'.someClass\'); })', parserOptions, errors },
23-
{ code: 'test(\'a test case\', async function () { cy.get(\'.someClass\'); })', parserOptions, errors },
18+
{ code: 'it(\'a test case\', async () => { cy.get(\'.someClass\'); })', errors },
19+
{ code: 'test(\'a test case\', async () => { cy.get(\'.someClass\'); })', errors },
20+
{ code: 'it(\'a test case\', async function () { cy.get(\'.someClass\'); })', errors },
21+
{ code: 'test(\'a test case\', async function () { cy.get(\'.someClass\'); })', errors },
2422
],
2523
})

tests/lib/rules/no-force.js

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,39 @@
11
'use strict'
22

3-
//------------------------------------------------------------------------------
4-
// Requirements
5-
//------------------------------------------------------------------------------
6-
73
const rule = require('../../../lib/rules/no-force')
8-
94
const RuleTester = require('eslint').RuleTester
105

11-
const errors = [{ messageId: 'unexpected' }]
12-
const parserOptions = { ecmaVersion: 2018 }
6+
const ruleTester = new RuleTester()
137

14-
//------------------------------------------------------------------------------
15-
// Tests
16-
//------------------------------------------------------------------------------
17-
18-
let ruleTester = new RuleTester()
8+
const errors = [{ messageId: 'unexpected' }]
199

2010
ruleTester.run('no-force', rule, {
2111

2212
valid: [
23-
{ code: `cy.get('button').click()`, parserOptions },
24-
{ code: `cy.get('button').click({multiple: true})`, parserOptions },
25-
{ code: `cy.get('button').dblclick()`, parserOptions },
26-
{ code: `cy.get('input').type('somth')`, parserOptions },
27-
{ code: `cy.get('input').type('somth', {anyoption: true})`, parserOptions },
28-
{ code: `cy.get('input').trigger('click', {anyoption: true})`, parserOptions },
29-
{ code: `cy.get('input').rightclick({anyoption: true})`, parserOptions },
30-
{ code: `cy.get('input').check()`, parserOptions },
31-
{ code: `cy.get('input').select()`, parserOptions },
32-
{ code: `cy.get('input').focus()`, parserOptions },
33-
{ code: `cy.document().trigger("keydown", { ...event })`, parserOptions },
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 })` },
3424
],
3525

3626
invalid: [
37-
{ code: `cy.get('button').click({force: true})`, parserOptions, errors },
38-
{ code: `cy.get('button').dblclick({force: true})`, parserOptions, errors },
39-
{ code: `cy.get('input').type('somth', {force: true})`, parserOptions, errors },
40-
{ code: `cy.get('div').find('.foo').type('somth', {force: true})`, parserOptions, errors },
41-
{ code: `cy.get('div').find('.foo').find('.bar').click({force: true})`, parserOptions, errors },
42-
{ code: `cy.get('div').find('.foo').find('.bar').trigger('change', {force: true})`, parserOptions, errors },
43-
{ code: `cy.get('input').trigger('click', {force: true})`, parserOptions, errors },
44-
{ code: `cy.get('input').rightclick({force: true})`, parserOptions, errors },
45-
{ code: `cy.get('input').check({force: true})`, parserOptions, errors },
46-
{ code: `cy.get('input').select({force: true})`, parserOptions, errors },
47-
{ code: `cy.get('input').focus({force: true})`, parserOptions, errors },
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 },
4838
],
4939
})

tests/lib/rules/no-pause.js

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,23 @@
11
'use strict'
22

3-
//------------------------------------------------------------------------------
4-
// Requirements
5-
//------------------------------------------------------------------------------
6-
73
const rule = require('../../../lib/rules/no-pause')
8-
94
const RuleTester = require('eslint').RuleTester
105

11-
const errors = [{ messageId: 'unexpected' }]
12-
const parserOptions = { ecmaVersion: 2018 }
13-
14-
//------------------------------------------------------------------------------
15-
// Tests
16-
//------------------------------------------------------------------------------
17-
186
const ruleTester = new RuleTester()
197

8+
const errors = [{ messageId: 'unexpected' }]
9+
2010
ruleTester.run('no-pause', rule, {
2111

2212
valid: [
23-
{ code: `pause()`, parserOptions },
24-
{ code: `cy.get('button').dblclick()`, parserOptions },
13+
{ code: `pause()` },
14+
{ code: `cy.get('button').dblclick()` },
2515
],
26-
16+
2717
invalid: [
28-
{ code: `cy.pause()`, parserOptions, errors },
29-
{ code: `cy.pause({ log: false })`, parserOptions, errors },
30-
{ code: `cy.get('button').pause()`, parserOptions, errors },
31-
{
32-
code: `cy.get('a').should('have.attr', 'href').and('match', /dashboard/).pause()`,
33-
parserOptions,
34-
errors
35-
}
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 }
3622
],
3723
})

0 commit comments

Comments
 (0)