Skip to content

Commit 547e67b

Browse files
authored
fix(prefer-importing-jest-globals): handle string-based import names (#1756)
1 parent 9f21577 commit 547e67b

File tree

2 files changed

+73
-5
lines changed

2 files changed

+73
-5
lines changed

src/rules/__tests__/prefer-importing-jest-globals.test.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ ruleTester.run('prefer-importing-jest-globals', rule, {
2222
`,
2323
parserOptions: { sourceType: 'module' },
2424
},
25+
{
26+
code: dedent`
27+
// with import
28+
import { 'test' as test, expect } from '@jest/globals';
29+
test('should pass', () => {
30+
expect(true).toBeDefined();
31+
});
32+
`,
33+
parserOptions: { sourceType: 'module', ecmaVersion: 2022 },
34+
},
2535
{
2636
code: dedent`
2737
test('should pass', () => {
@@ -65,6 +75,13 @@ ruleTester.run('prefer-importing-jest-globals', rule, {
6575
`,
6676
parserOptions: { sourceType: 'module' },
6777
},
78+
{
79+
code: dedent`
80+
import { 'it' as itChecks } from '@jest/globals';
81+
itChecks("foo");
82+
`,
83+
parserOptions: { sourceType: 'module', ecmaVersion: 2022 },
84+
},
6885
{
6986
code: dedent`
7087
const { test } = require('@jest/globals');
@@ -158,6 +175,56 @@ ruleTester.run('prefer-importing-jest-globals', rule, {
158175
},
159176
],
160177
},
178+
{
179+
code: dedent`
180+
import { 'describe' as describe } from '@jest/globals';
181+
describe("suite", () => {
182+
test("foo");
183+
expect(true).toBeDefined();
184+
})
185+
`,
186+
output: dedent`
187+
import { 'describe' as describe, expect, test } from '@jest/globals';
188+
describe("suite", () => {
189+
test("foo");
190+
expect(true).toBeDefined();
191+
})
192+
`,
193+
parserOptions: { sourceType: 'module', ecmaVersion: 2022 },
194+
errors: [
195+
{
196+
endColumn: 7,
197+
column: 3,
198+
line: 3,
199+
messageId: 'preferImportingJestGlobal',
200+
},
201+
],
202+
},
203+
{
204+
code: dedent`
205+
import { 'describe' as context } from '@jest/globals';
206+
context("suite", () => {
207+
test("foo");
208+
expect(true).toBeDefined();
209+
})
210+
`,
211+
output: dedent`
212+
import { 'describe' as context, expect, test } from '@jest/globals';
213+
context("suite", () => {
214+
test("foo");
215+
expect(true).toBeDefined();
216+
})
217+
`,
218+
parserOptions: { sourceType: 'module', ecmaVersion: 2022 },
219+
errors: [
220+
{
221+
endColumn: 7,
222+
column: 3,
223+
line: 3,
224+
messageId: 'preferImportingJestGlobal',
225+
},
226+
],
227+
},
161228
{
162229
code: dedent`
163230
jest.useFakeTimers();

src/rules/prefer-importing-jest-globals.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,18 @@ export default createRule({
116116

117117
if (importNode?.type === AST_NODE_TYPES.ImportDeclaration) {
118118
for (const specifier of importNode.specifiers) {
119-
if (
120-
specifier.type === AST_NODE_TYPES.ImportSpecifier &&
121-
specifier.imported?.name
122-
) {
123-
let importName = specifier.imported.name;
119+
if (specifier.type === AST_NODE_TYPES.ImportSpecifier) {
120+
let importName = specifier.imported.name ?? '';
124121
const local = getAccessorValue(specifier.local);
125122

126123
if (local !== importName) {
127124
importName = `${importName} as ${local}`;
128125
}
129126

127+
if ('value' in specifier.imported) {
128+
importName = `'${specifier.imported.value}'${importName}`;
129+
}
130+
130131
functionsToImport.add(importName);
131132
}
132133

0 commit comments

Comments
 (0)