Skip to content

Commit d3df673

Browse files
committed
refactor(prefer-screen-queries): detect render methods with helper
1 parent ed0212f commit d3df673

File tree

2 files changed

+83
-4
lines changed

2 files changed

+83
-4
lines changed

lib/rules/prefer-screen-queries.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default createTestingLibraryRule<Options, MessageIds>({
5050
},
5151
defaultOptions: [],
5252

53-
create(context) {
53+
create(context, _, helpers) {
5454
function reportInvalidUsage(node: TSESTree.Identifier) {
5555
context.report({
5656
node,
@@ -75,9 +75,8 @@ export default createTestingLibraryRule<Options, MessageIds>({
7575
return;
7676
}
7777
const isWithinFunction = node.init.callee.name === 'within';
78-
// TODO add the custom render option #198
7978
const usesRenderOptions =
80-
node.init.callee.name === 'render' &&
79+
helpers.isRenderUtil(node.init.callee) &&
8180
usesContainerOrBaseElement(node.init);
8281

8382
if (!isWithinFunction && !usesRenderOptions) {
@@ -130,7 +129,7 @@ export default createTestingLibraryRule<Options, MessageIds>({
130129
isCallExpression(node.parent.object) &&
131130
ASTUtils.isIdentifier(node.parent.object.callee) &&
132131
node.parent.object.callee.name !== 'within' &&
133-
node.parent.object.callee.name === 'render' &&
132+
helpers.isRenderUtil(node.parent.object.callee) &&
134133
!usesContainerOrBaseElement(node.parent.object)
135134
) {
136135
reportInvalidUsage(node);

tests/lib/rules/prefer-screen-queries.test.ts

+80
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,15 @@ ruleTester.run(RULE_NAME, rule, {
127127
render(foo, { baseElement: treeA }).${queryMethod}()
128128
`,
129129
})),
130+
// ...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
131+
// settings: {
132+
// 'testing-library/custom-renders': ['customRender'],
133+
// },
134+
// code: `
135+
// import { anotherRender } from 'whatever'
136+
// const { ${queryMethod} } = anotherRender(foo)
137+
// ${queryMethod}()`,
138+
// })),
130139
],
131140

132141
invalid: [
@@ -143,6 +152,77 @@ ruleTester.run(RULE_NAME, rule, {
143152
},
144153
],
145154
})),
155+
...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
156+
settings: { 'testing-library/utils-module': 'test-utils' },
157+
code: `
158+
import { render } from 'test-utils'
159+
const { ${queryMethod} } = render(foo)
160+
${queryMethod}()`,
161+
errors: [
162+
{
163+
line: 4,
164+
column: 9,
165+
messageId: 'preferScreenQueries',
166+
data: {
167+
name: queryMethod,
168+
},
169+
},
170+
],
171+
})),
172+
173+
...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
174+
settings: {
175+
'testing-library/custom-renders': ['customRender'],
176+
},
177+
code: `
178+
import { customRender } from 'whatever'
179+
const { ${queryMethod} } = customRender(foo)
180+
${queryMethod}()`,
181+
errors: [
182+
{
183+
line: 4,
184+
column: 9,
185+
messageId: 'preferScreenQueries',
186+
data: {
187+
name: queryMethod,
188+
},
189+
},
190+
],
191+
})),
192+
...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
193+
settings: { 'testing-library/utils-module': 'test-utils' },
194+
code: `
195+
import { render as testingLibraryRender} from '@testing-library/react'
196+
const { ${queryMethod} } = testingLibraryRender(foo)
197+
${queryMethod}()`,
198+
errors: [
199+
{
200+
line: 4,
201+
column: 9,
202+
messageId: 'preferScreenQueries',
203+
data: {
204+
name: queryMethod,
205+
},
206+
},
207+
],
208+
})),
209+
...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
210+
settings: { 'testing-library/utils-module': 'test-utils' },
211+
code: `
212+
import { render } from 'test-utils'
213+
const { ${queryMethod} } = render(foo)
214+
${queryMethod}()`,
215+
errors: [
216+
{
217+
line: 4,
218+
column: 9,
219+
messageId: 'preferScreenQueries',
220+
data: {
221+
name: queryMethod,
222+
},
223+
},
224+
],
225+
})),
146226
...ALL_QUERIES_COMBINATIONS.map((queryMethod) => ({
147227
code: `render().${queryMethod}()`,
148228
errors: [

0 commit comments

Comments
 (0)