diff --git a/README.md b/README.md index 0fa75232..506a076e 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Name | ✔️ | 🛠 | Description [prefer-placeholders](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/master/docs/rules/prefer-placeholders.md) | | | Disallows template literals as report messages [no-useless-token-range](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/master/docs/rules/no-useless-token-range.md) | ✔️ | 🛠 | Disallows unnecessary calls to sourceCode.getFirstToken and sourceCode.getLastToken [consistent-output](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/master/docs/rules/consistent-output.md) | | | Enforces consistent use of output assertions in rule tests -[no-identical-tests](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/master/docs/rules/no-identical-tests.md) | | | Disallows identical tests +[no-identical-tests](https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/blob/master/docs/rules/no-identical-tests.md) | | 🛠 | Disallows identical tests ## Supported Presets diff --git a/docs/rules/no-identical-tests.md b/docs/rules/no-identical-tests.md index 53e76155..77d90d93 100644 --- a/docs/rules/no-identical-tests.md +++ b/docs/rules/no-identical-tests.md @@ -1,5 +1,7 @@ # Disallow identical tests (no-identical-tests) +(fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#fix) automatically fixes problems reported by this rule. + When a rule has a lot of tests, it's sometimes difficult to tell if any tests are duplicates. This rule would warn if any test cases have the same properties. ## Rule Details diff --git a/lib/rules/no-identical-tests.js b/lib/rules/no-identical-tests.js index f0aa0cb7..f05e8540 100644 --- a/lib/rules/no-identical-tests.js +++ b/lib/rules/no-identical-tests.js @@ -18,7 +18,7 @@ module.exports = { category: 'Tests', recommended: false, }, - fixable: null, // or "code" or "whitespace" + fixable: 'code', schema: [], }, @@ -41,6 +41,13 @@ module.exports = { context.report({ node: test, message, + fix (fixer) { + const start = sourceCode.getTokenBefore(test); + const end = sourceCode.getTokenAfter(test); + return fixer.removeRange( + // should remove test's trailing comma + [start.range[1], end.value === ',' ? end.range[1] : test.range[1]]); + }, }); } else { cache[testCode] = true; diff --git a/tests/lib/rules/no-identical-tests.js b/tests/lib/rules/no-identical-tests.js index 4f46611f..1f7fe6e6 100644 --- a/tests/lib/rules/no-identical-tests.js +++ b/tests/lib/rules/no-identical-tests.js @@ -25,7 +25,15 @@ ruleTester.run('no-identical-tests', rule, { new RuleTester().run('foo', bar, { valid: [ { code: 'foo' }, - { code: 'bar' } + { code: 'bar' }, + ], + invalid: [] + }); + `, + ` + new RuleTester().run('foo', bar, { + valid: [ + { code: 'foo' } ], invalid: [] }); @@ -33,6 +41,26 @@ ruleTester.run('no-identical-tests', rule, { ], invalid: [ + { + code: ` + new RuleTester().run('foo', bar, { + valid: [ + { code: 'foo' }, + { code: 'foo' }, + ], + invalid: [] + }); + `, + errors: [ERROR], + output: ` + new RuleTester().run('foo', bar, { + valid: [ + { code: 'foo' }, + ], + invalid: [] + }); + `, + }, { code: ` new RuleTester().run('foo', bar, { @@ -44,6 +72,14 @@ ruleTester.run('no-identical-tests', rule, { }); `, errors: [ERROR], + output: ` + new RuleTester().run('foo', bar, { + valid: [ + { code: 'foo' }, + ], + invalid: [] + }); + `, }, { code: ` @@ -59,6 +95,16 @@ ruleTester.run('no-identical-tests', rule, { }); `, errors: [ERROR, ERROR], + output: ` + new RuleTester().run('foo', bar, { + valid: [ + { code: 'foo' }, + ], + invalid: [ + { code: 'foo', errors: ['bar'] }, + ] + }); + `, }, ], });