diff --git a/src/rules/__tests__/no-hooks.test.ts b/src/rules/__tests__/no-hooks.test.ts index b7cf220cb..0e4b17c96 100644 --- a/src/rules/__tests__/no-hooks.test.ts +++ b/src/rules/__tests__/no-hooks.test.ts @@ -49,6 +49,17 @@ ruleTester.run('no-hooks', rule, { { messageId: 'unexpectedHook', data: { hookName: HookName.afterEach } }, ], }, + { + code: dedent` + import { 'afterEach' as afterEachTest } from '@jest/globals'; + + afterEachTest(() => {}) + `, + parserOptions: { sourceType: 'module', ecmaVersion: 2022 }, + errors: [ + { messageId: 'unexpectedHook', data: { hookName: HookName.afterEach } }, + ], + }, { code: 'beforeEach(() => {}); afterEach(() => { jest.resetModules() });', options: [{ allow: [HookName.afterEach] }], diff --git a/src/rules/__tests__/require-top-level-describe.test.ts b/src/rules/__tests__/require-top-level-describe.test.ts index dfd2e7301..074819f54 100644 --- a/src/rules/__tests__/require-top-level-describe.test.ts +++ b/src/rules/__tests__/require-top-level-describe.test.ts @@ -108,6 +108,16 @@ ruleTester.run('require-top-level-describe', rule, { parserOptions: { sourceType: 'module' }, errors: [{ messageId: 'unexpectedHook' }], }, + { + code: dedent` + import { 'describe' as describe, afterAll as onceEverythingIsDone } from '@jest/globals'; + + describe("test suite", () => {}); + onceEverythingIsDone("my test", () => {}) + `, + parserOptions: { sourceType: 'module', ecmaVersion: 2022 }, + errors: [{ messageId: 'unexpectedHook' }], + }, { code: "it.skip('test', () => {});", errors: [{ messageId: 'unexpectedTestCase' }], diff --git a/src/rules/utils/__tests__/parseJestFnCall.test.ts b/src/rules/utils/__tests__/parseJestFnCall.test.ts index 1b445ea09..e8ef3646c 100644 --- a/src/rules/utils/__tests__/parseJestFnCall.test.ts +++ b/src/rules/utils/__tests__/parseJestFnCall.test.ts @@ -441,7 +441,34 @@ ruleTester.run('esm', rule, { parserOptions: { sourceType: 'module', ecmaVersion: 2017 }, }, ], - invalid: [], + invalid: [ + { + code: dedent` + import { 'describe' as it } from '@jest/globals'; + + it('is a jest function', () => {}); + `, + parserOptions: { sourceType: 'module', ecmaVersion: 2022 }, + errors: [ + { + messageId: 'details', + data: expectedParsedJestFnCallResultData({ + name: 'describe', + type: 'describe', + head: { + original: 'describe', + local: 'it', + type: 'import', + node: 'it', + }, + members: [], + }), + column: 1, + line: 3, + }, + ], + }, + ], }); ruleTester.run('esm (dynamic)', rule, { diff --git a/src/rules/utils/parseJestFnCall.ts b/src/rules/utils/parseJestFnCall.ts index be70caa1e..56742edd8 100644 --- a/src/rules/utils/parseJestFnCall.ts +++ b/src/rules/utils/parseJestFnCall.ts @@ -452,9 +452,15 @@ const describeImportDefAsImport = ( return null; } + let imported = def.node.imported.name ?? ''; + + if ('value' in def.node.imported) { + imported = def.node.imported.value as string; + } + return { source: def.parent.source.value, - imported: def.node.imported.name, + imported, local: def.node.local.name, }; };