From 677be4558a3954e364b0c4150678a4d3fd832337 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Wed, 17 Feb 2021 12:13:22 +1300 Subject: [PATCH] fix(require-top-level-describe): handle `describe.each` properly (#745) --- .../require-top-level-describe.test.ts | 35 +++++++++++++++++-- src/rules/require-top-level-describe.ts | 10 ++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/rules/__tests__/require-top-level-describe.test.ts b/src/rules/__tests__/require-top-level-describe.test.ts index af6bc5b88..26c218e84 100644 --- a/src/rules/__tests__/require-top-level-describe.test.ts +++ b/src/rules/__tests__/require-top-level-describe.test.ts @@ -16,8 +16,8 @@ ruleTester.run('require-top-level-describe', rule, { 'describe("test suite", () => { it("my test") });', dedent` describe("test suite", () => { - beforeEach("a", () => {}); - describe("b", () => {}); + beforeEach("a", () => {}); + describe("b", () => {}); test("c", () => {}) }); `, @@ -33,6 +33,33 @@ ruleTester.run('require-top-level-describe', rule, { }); `, 'foo()', + 'describe.each([1, true])("trues", value => { it("an it", () => expect(value).toBe(true) ); });', + dedent` + describe('%s', () => { + it('is fine', () => { + // + }); + }); + + describe.each('world')('%s', () => { + it.each([1, 2, 3])('%n', () => { + // + }); + }); + `, + dedent` + describe.each('hello')('%s', () => { + it('is fine', () => { + // + }); + }); + + describe.each('world')('%s', () => { + it.each([1, 2, 3])('%n', () => { + // + }); + }); + `, ], invalid: [ { @@ -62,5 +89,9 @@ ruleTester.run('require-top-level-describe', rule, { `, errors: [{ messageId: 'unexpectedHook' }], }, + { + code: "it.each([1, 2, 3])('%n', () => {});", + errors: [{ messageId: 'unexpectedTestCase' }], + }, ], }); diff --git a/src/rules/require-top-level-describe.ts b/src/rules/require-top-level-describe.ts index 339fd81d1..c70b6d90c 100644 --- a/src/rules/require-top-level-describe.ts +++ b/src/rules/require-top-level-describe.ts @@ -1,5 +1,11 @@ import { TSESTree } from '@typescript-eslint/experimental-utils'; -import { createRule, isDescribe, isHook, isTestCase } from './utils'; +import { + createRule, + isDescribe, + isDescribeEach, + isHook, + isTestCase, +} from './utils'; export default createRule({ name: __filename, @@ -44,7 +50,7 @@ export default createRule({ } }, 'CallExpression:exit'(node: TSESTree.CallExpression) { - if (isDescribe(node)) { + if (isDescribe(node) && !isDescribeEach(node)) { numberOfDescribeBlocks--; } },