Skip to content

Commit 8693bf3

Browse files
committed
fix: false negatives for no-dom-import with several imports
Use the new refactored utils function to get a list of all testing-library imports and make sure that none of them are a dom import. Ref: testing-library#586
1 parent 4e1eed9 commit 8693bf3

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

docs/rules/no-dom-import.md

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ import { fireEvent } from 'dom-testing-library';
3131
import { fireEvent } from '@testing-library/dom';
3232
```
3333

34+
```js
35+
import { render } from '@testing-library/react'; // Okay, no error
36+
import { screen } from '@testing-library/dom'; // Error, unnecessary import from @testing-library/dom
37+
```
38+
3439
```js
3540
const { fireEvent } = require('dom-testing-library');
3641
```

lib/rules/no-dom-import.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TSESTree } from '@typescript-eslint/utils';
22

33
import { createTestingLibraryRule } from '../create-testing-library-rule';
4-
import { isCallExpression } from '../node-utils';
4+
import { isCallExpression, getImportModuleName } from '../node-utils';
55

66
export const RULE_NAME = 'no-dom-import';
77
export type MessageIds = 'noDomImport' | 'noDomImportFramework';
@@ -84,22 +84,22 @@ export default createTestingLibraryRule<Options, MessageIds>({
8484

8585
return {
8686
'Program:exit'() {
87-
const importName = helpers.getTestingLibraryImportName();
88-
const importNode = helpers.getTestingLibraryImportNode();
87+
let importName: string | undefined;
88+
const allImportNodes = helpers.getAllTestingLibraryImportNodes();
8989

90-
if (!importNode) {
91-
return;
92-
}
90+
allImportNodes.forEach((importNode) => {
91+
importName = getImportModuleName(importNode);
9392

94-
const domModuleName = DOM_TESTING_LIBRARY_MODULES.find(
95-
(module) => module === importName
96-
);
93+
const domModuleName = DOM_TESTING_LIBRARY_MODULES.find(
94+
(module) => module === importName
95+
);
9796

98-
if (!domModuleName) {
99-
return;
100-
}
97+
if (!domModuleName) {
98+
return;
99+
}
101100

102-
report(importNode, domModuleName);
101+
report(importNode, domModuleName);
102+
});
103103
},
104104
};
105105
},

tests/lib/rules/no-dom-import.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -203,5 +203,17 @@ ruleTester.run(RULE_NAME, rule, {
203203
code: 'require("@testing-library/dom")',
204204
errors: [{ messageId: 'noDomImport' }],
205205
},
206+
{
207+
code: `
208+
require("@testing-library/dom");
209+
require("@testing-library/react");`,
210+
errors: [{ line: 2, messageId: 'noDomImport' }],
211+
},
212+
{
213+
code: `
214+
import { render } from '@testing-library/react';
215+
import { screen } from '@testing-library/dom';`,
216+
errors: [{ line: 3, messageId: 'noDomImport' }],
217+
},
206218
],
207219
});

0 commit comments

Comments
 (0)