diff --git a/README.md b/README.md index 0fa46197..3b55524f 100644 --- a/README.md +++ b/README.md @@ -296,7 +296,7 @@ module.exports = [ | :------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :-- | | [await-async-events](docs/rules/await-async-events.md) | Enforce promises from async event methods are handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | [await-async-queries](docs/rules/await-async-queries.md) | Enforce promises from async queries to be handled | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | -| [await-async-utils](docs/rules/await-async-utils.md) | Enforce promises from async utils to be awaited properly | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | +| [await-async-utils](docs/rules/await-async-utils.md) | Enforce promises from async utils to be awaited properly | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | 🔧 | | [consistent-data-testid](docs/rules/consistent-data-testid.md) | Ensures consistent usage of `data-testid` | | | | | [no-await-sync-events](docs/rules/no-await-sync-events.md) | Disallow unnecessary `await` for sync events | ![badge-angular][] ![badge-dom][] ![badge-react][] | | | | [no-await-sync-queries](docs/rules/no-await-sync-queries.md) | Disallow unnecessary `await` for sync queries | ![badge-angular][] ![badge-dom][] ![badge-marko][] ![badge-react][] ![badge-vue][] | | | diff --git a/docs/rules/await-async-utils.md b/docs/rules/await-async-utils.md index b5433d83..47a6facf 100644 --- a/docs/rules/await-async-utils.md +++ b/docs/rules/await-async-utils.md @@ -2,6 +2,8 @@ 💼 This rule is enabled in the following configs: `angular`, `dom`, `marko`, `react`, `vue`. +🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix). + Ensure that promises returned by async utils are handled properly. diff --git a/lib/create-testing-library-rule/detect-testing-library-utils.ts b/lib/create-testing-library-rule/detect-testing-library-utils.ts index af263a9d..9393a88b 100644 --- a/lib/create-testing-library-rule/detect-testing-library-utils.ts +++ b/lib/create-testing-library-rule/detect-testing-library-utils.ts @@ -35,7 +35,7 @@ export type TestingLibrarySettings = { export type TestingLibraryContext< TOptions extends readonly unknown[], - TMessageIds extends string, + TMessageIds extends string > = Readonly< TSESLint.RuleContext & { settings: TestingLibrarySettings; @@ -45,7 +45,7 @@ export type TestingLibraryContext< export type EnhancedRuleCreate< TOptions extends readonly unknown[], TMessageIds extends string, - TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener, + TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener > = ( context: TestingLibraryContext, optionsWithDefault: Readonly, @@ -156,7 +156,7 @@ export type DetectionOptions = { export function detectTestingLibraryUtils< TOptions extends readonly unknown[], TMessageIds extends string, - TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener, + TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener >( ruleCreate: EnhancedRuleCreate, { skipRuleReportingCheck = false }: Partial = {} diff --git a/lib/create-testing-library-rule/index.ts b/lib/create-testing-library-rule/index.ts index c87f6415..7a919447 100644 --- a/lib/create-testing-library-rule/index.ts +++ b/lib/create-testing-library-rule/index.ts @@ -11,7 +11,7 @@ import { export function createTestingLibraryRule< TOptions extends readonly unknown[], TMessageIds extends string, - TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener, + TRuleListener extends TSESLint.RuleListener = TSESLint.RuleListener >({ create, detectionOptions = {}, diff --git a/lib/rules/await-async-events.ts b/lib/rules/await-async-events.ts index 219c45bf..06a80d78 100644 --- a/lib/rules/await-async-events.ts +++ b/lib/rules/await-async-events.ts @@ -21,7 +21,7 @@ type EventModules = (typeof EVENTS_SIMULATORS)[number]; export type Options = [ { eventModule: EventModules | EventModules[]; - }, + } ]; export default createTestingLibraryRule({ diff --git a/lib/rules/await-async-utils.ts b/lib/rules/await-async-utils.ts index a52e96d0..84bbe222 100644 --- a/lib/rules/await-async-utils.ts +++ b/lib/rules/await-async-utils.ts @@ -7,6 +7,7 @@ import { getFunctionName, getInnermostReturningFunction, getVariableReferences, + isMemberExpression, isObjectPattern, isPromiseHandled, isProperty, @@ -36,6 +37,7 @@ export default createTestingLibraryRule({ 'Promise returned from {{ name }} wrapper over async util must be handled', }, schema: [], + fixable: 'code', }, defaultOptions: [], @@ -149,6 +151,12 @@ export default createTestingLibraryRule({ data: { name: node.name, }, + fix: (fixer) => { + if (isMemberExpression(node.parent)) { + return fixer.insertTextBefore(node.parent, 'await '); + } + return fixer.insertTextBefore(node, 'await '); + }, }); } } else { @@ -161,6 +169,9 @@ export default createTestingLibraryRule({ data: { name: node.name, }, + fix: (fixer) => { + return fixer.insertTextBefore(referenceNode, 'await '); + }, }); return; } diff --git a/lib/rules/consistent-data-testid.ts b/lib/rules/consistent-data-testid.ts index f8b7ff6e..de3c772c 100644 --- a/lib/rules/consistent-data-testid.ts +++ b/lib/rules/consistent-data-testid.ts @@ -11,7 +11,7 @@ export type Options = [ testIdAttribute?: string[] | string; testIdPattern: string; customMessage?: string; - }, + } ]; const FILENAME_PLACEHOLDER = '{fileName}'; diff --git a/lib/rules/no-render-in-lifecycle.ts b/lib/rules/no-render-in-lifecycle.ts index 2e5e52c1..4496522c 100644 --- a/lib/rules/no-render-in-lifecycle.ts +++ b/lib/rules/no-render-in-lifecycle.ts @@ -14,7 +14,7 @@ export type MessageIds = 'noRenderInSetup'; type Options = [ { allowTestingFrameworkSetupHook?: string; - }, + } ]; export function findClosestBeforeHook( diff --git a/lib/rules/prefer-explicit-assert.ts b/lib/rules/prefer-explicit-assert.ts index 4b0d57ea..7a80e059 100644 --- a/lib/rules/prefer-explicit-assert.ts +++ b/lib/rules/prefer-explicit-assert.ts @@ -16,7 +16,7 @@ type Options = [ { assertion?: string; includeFindQueries?: boolean; - }, + } ]; const isAtTopLevel = (node: TSESTree.Node) => diff --git a/lib/rules/prefer-presence-queries.ts b/lib/rules/prefer-presence-queries.ts index b654dd6a..dd816408 100644 --- a/lib/rules/prefer-presence-queries.ts +++ b/lib/rules/prefer-presence-queries.ts @@ -9,7 +9,7 @@ export type Options = [ { presence?: boolean; absence?: boolean; - }, + } ]; export default createTestingLibraryRule({ diff --git a/lib/rules/prefer-query-matchers.ts b/lib/rules/prefer-query-matchers.ts index 80e819e9..3f94a8e9 100644 --- a/lib/rules/prefer-query-matchers.ts +++ b/lib/rules/prefer-query-matchers.ts @@ -11,7 +11,7 @@ export type Options = [ query: 'get' | 'query'; matcher: string; }[]; - }, + } ]; export default createTestingLibraryRule({ diff --git a/lib/utils/compat.ts b/lib/utils/compat.ts index 2216dd8d..3fe8ef66 100644 --- a/lib/utils/compat.ts +++ b/lib/utils/compat.ts @@ -5,7 +5,7 @@ declare module '@typescript-eslint/utils/dist/ts-eslint/Rule' { // eslint-disable-next-line @typescript-eslint/no-unused-vars TMessageIds extends string, // eslint-disable-next-line @typescript-eslint/no-unused-vars - TOptions extends readonly unknown[], + TOptions extends readonly unknown[] > { /** * The filename associated with the source. diff --git a/lib/utils/types.ts b/lib/utils/types.ts index 1dd6d9d3..4a5a7283 100644 --- a/lib/utils/types.ts +++ b/lib/utils/types.ts @@ -20,7 +20,7 @@ export type TestingLibraryRuleMetaDocs = }; export type TestingLibraryRuleMeta< TMessageIds extends string, - TOptions extends readonly unknown[], + TOptions extends readonly unknown[] > = Omit, 'docs'> & { docs: TestingLibraryRuleMetaDocs; }; diff --git a/tests/create-testing-library-rule.test.ts b/tests/create-testing-library-rule.test.ts index c6e72252..55a9f22c 100644 --- a/tests/create-testing-library-rule.test.ts +++ b/tests/create-testing-library-rule.test.ts @@ -459,7 +459,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'renderError', }, ], - }) as const + } as const) ), { code: ` diff --git a/tests/lib/FlatCompatRuleTester.ts b/tests/lib/FlatCompatRuleTester.ts index b3ef5943..782c55de 100644 --- a/tests/lib/FlatCompatRuleTester.ts +++ b/tests/lib/FlatCompatRuleTester.ts @@ -122,7 +122,7 @@ export class FlatCompatRuleTester extends TSESLint.RuleTester { public override run< TMessageIds extends string, - TOptions extends readonly unknown[], + TOptions extends readonly unknown[] >( ruleName: string, rule: TSESLint.RuleModule, @@ -141,7 +141,7 @@ export class FlatCompatRuleTester extends TSESLint.RuleTester { | TSESLint.RuleTesterConfig | string | TSESLint.ValidTestCase - | TSESLint.InvalidTestCase, + | TSESLint.InvalidTestCase >(config: T): T { if (!config || !usingFlatConfig || typeof config === 'string') { return config; diff --git a/tests/lib/rules/await-async-events.test.ts b/tests/lib/rules/await-async-events.test.ts index 80ffb15d..55f1076d 100644 --- a/tests/lib/rules/await-async-events.test.ts +++ b/tests/lib/rules/await-async-events.test.ts @@ -427,7 +427,7 @@ ruleTester.run(RULE_NAME, rule, { await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -448,7 +448,7 @@ ruleTester.run(RULE_NAME, rule, { ], options: [{ eventModule: 'fireEvent' }], output: null, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -481,7 +481,7 @@ ruleTester.run(RULE_NAME, rule, { test('should handle external function', run) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -508,7 +508,7 @@ ruleTester.run(RULE_NAME, rule, { await testingLibraryFireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -535,7 +535,7 @@ ruleTester.run(RULE_NAME, rule, { await testingLibrary.fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -569,7 +569,7 @@ ruleTester.run(RULE_NAME, rule, { await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -598,7 +598,7 @@ ruleTester.run(RULE_NAME, rule, { await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -631,7 +631,7 @@ ruleTester.run(RULE_NAME, rule, { await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -664,7 +664,7 @@ ruleTester.run(RULE_NAME, rule, { await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( @@ -695,7 +695,7 @@ ruleTester.run(RULE_NAME, rule, { const promise = await fireEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -731,7 +731,7 @@ ruleTester.run(RULE_NAME, rule, { await triggerEvent() }) `, - }) as const + } as const) ), ...FIRE_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -756,7 +756,7 @@ ruleTester.run(RULE_NAME, rule, { ], options: [{ eventModule: 'fireEvent' }], output: null, - }) as const + } as const) ), ]), ...USER_EVENT_ASYNC_FRAMEWORKS.flatMap((testingFramework) => [ @@ -785,7 +785,7 @@ ruleTester.run(RULE_NAME, rule, { await userEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -806,7 +806,7 @@ ruleTester.run(RULE_NAME, rule, { ], options: [{ eventModule: 'userEvent' }], output: null, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -833,7 +833,7 @@ ruleTester.run(RULE_NAME, rule, { await testingLibraryUserEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -867,7 +867,7 @@ ruleTester.run(RULE_NAME, rule, { await userEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -897,7 +897,7 @@ ruleTester.run(RULE_NAME, rule, { const promise = await userEvent.${eventMethod}(getByLabelText('username')) }) `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -933,7 +933,7 @@ ruleTester.run(RULE_NAME, rule, { await triggerEvent() }) `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -958,7 +958,7 @@ ruleTester.run(RULE_NAME, rule, { ], options: [{ eventModule: 'userEvent' }], output: null, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -984,7 +984,7 @@ ruleTester.run(RULE_NAME, rule, { condition ? null : (null, true && await userEvent.${eventMethod}(getByLabelText('username'))); }); `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -1010,7 +1010,7 @@ ruleTester.run(RULE_NAME, rule, { await (await userEvent.${eventMethod}(getByLabelText('username')) && userEvent.${eventMethod}(getByLabelText('username'))); }); `, - }) as const + } as const) ), ...USER_EVENT_ASYNC_FUNCTIONS.map( (eventMethod) => @@ -1044,7 +1044,7 @@ ruleTester.run(RULE_NAME, rule, { await (await userEvent.${eventMethod}(getByLabelText('username')), null); }); `, - }) as const + } as const) ), ]), { diff --git a/tests/lib/rules/await-async-queries.test.ts b/tests/lib/rules/await-async-queries.test.ts index efab2cbd..799e5e70 100644 --- a/tests/lib/rules/await-async-queries.test.ts +++ b/tests/lib/rules/await-async-queries.test.ts @@ -64,11 +64,11 @@ function createTestCase( ? { code: createTestCode({ code: test, isAsync, testingFramework }), errors: [], - } + } : { code: createTestCode({ code: test.code, isAsync, testingFramework }), errors: test.errors, - }; + }; }); } @@ -361,7 +361,7 @@ ruleTester.run(RULE_NAME, rule, { }); `, errors: [{ messageId: 'awaitAsyncQuery', line: 6, column: 21 }], - }) as const + } as const) ) ), ...ALL_ASYNC_COMBINATIONS_TO_TEST.map( @@ -382,7 +382,7 @@ ruleTester.run(RULE_NAME, rule, { data: { name: query }, }, ], - }) as const + } as const) ), ...ALL_ASYNC_COMBINATIONS_TO_TEST.map( (query) => @@ -403,7 +403,7 @@ ruleTester.run(RULE_NAME, rule, { data: { name: query }, }, ], - }) as const + } as const) ), ...ALL_ASYNC_COMBINATIONS_TO_TEST.map( (query) => @@ -425,7 +425,7 @@ ruleTester.run(RULE_NAME, rule, { data: { name: query }, }, ], - }) as const + } as const) ), // unresolved async queries are not valid (aggressive reporting) @@ -440,7 +440,7 @@ ruleTester.run(RULE_NAME, rule, { }) `, errors: [{ messageId: 'awaitAsyncQuery', line: 5, column: 27 }], - }) as const + } as const) ), // unhandled promise from async query function wrapper is invalid @@ -463,7 +463,7 @@ ruleTester.run(RULE_NAME, rule, { }) `, errors: [{ messageId: 'asyncQueryWrapper', line: 9, column: 27 }], - }) as const + } as const) ), // unhandled promise from async query arrow function wrapper is invalid ...ALL_ASYNC_COMBINATIONS_TO_TEST.map( @@ -485,7 +485,7 @@ ruleTester.run(RULE_NAME, rule, { }) `, errors: [{ messageId: 'asyncQueryWrapper', line: 9, column: 27 }], - }) as const + } as const) ), // unhandled promise implicitly returned from async query arrow function wrapper is invalid ...ALL_ASYNC_COMBINATIONS_TO_TEST.map( @@ -503,7 +503,7 @@ ruleTester.run(RULE_NAME, rule, { }) `, errors: [{ messageId: 'asyncQueryWrapper', line: 5, column: 27 }], - }) as const + } as const) ), // unhandled promise from custom query matching custom-queries setting is invalid diff --git a/tests/lib/rules/await-async-utils.test.ts b/tests/lib/rules/await-async-utils.test.ts index fc538079..bc4a1d21 100644 --- a/tests/lib/rules/await-async-utils.test.ts +++ b/tests/lib/rules/await-async-utils.test.ts @@ -347,7 +347,14 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from '${testingFramework}'; + test('${asyncUtil} util not waited is invalid', () => { + doSomethingElse(); + await ${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -367,7 +374,14 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from '${testingFramework}'; + test('${asyncUtil} util not waited is invalid', () => { + doSomethingElse(); + const el = await ${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -387,7 +401,14 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import * as asyncUtil from '${testingFramework}'; + test('asyncUtil.${asyncUtil} util not handled is invalid', () => { + doSomethingElse(); + await asyncUtil.${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -407,7 +428,14 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from '${testingFramework}'; + test('${asyncUtil} util promise saved not handled is invalid', () => { + doSomethingElse(); + const aPromise = await ${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -434,7 +462,15 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from '${testingFramework}'; + test('several ${asyncUtil} utils not handled are invalid', () => { + const aPromise = ${asyncUtil}(() => getByLabelText('username')); + doSomethingElse(await aPromise); + await ${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -461,7 +497,15 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from '${testingFramework}'; + test('unhandled expression that evaluates to promise is invalid', () => { + const aPromise = ${asyncUtil}(() => getByLabelText('username')); + doSomethingElse(await aPromise); + await ${asyncUtil}(() => getByLabelText('email')); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -486,7 +530,18 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'waitForSomethingAsync' }, }, ], - }) as const + output: ` + import { ${asyncUtil}, render } from '${testingFramework}'; + function waitForSomethingAsync() { + return ${asyncUtil}(() => somethingAsync()) + } + + test('unhandled promise from function wrapping ${asyncUtil} util is invalid', async () => { + render() + await waitForSomethingAsync() + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -508,7 +563,16 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import { ${asyncUtil} } from 'some-other-library'; + test( + 'aggressive reporting - util "${asyncUtil}" which is not related to testing library is invalid', + async () => { + doSomethingElse(); + await ${asyncUtil}(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -533,7 +597,18 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'waitForSomethingAsync' }, }, ], - }) as const + output: ` + import { ${asyncUtil}, render } from '${testingFramework}'; + function waitForSomethingAsync() { + return ${asyncUtil}(() => somethingAsync()) + } + + test('unhandled promise from function wrapping ${asyncUtil} util is invalid', async () => { + render() + const el = await waitForSomethingAsync() + }); + `, + } as const) ), ...ASYNC_UTILS.map( @@ -556,7 +631,16 @@ ruleTester.run(RULE_NAME, rule, { data: { name: asyncUtil }, }, ], - }) as const + output: ` + import * as asyncUtils from 'some-other-library'; + test( + 'aggressive reporting - util "asyncUtils.${asyncUtil}" which is not related to testing library is invalid', + async () => { + doSomethingElse(); + await asyncUtils.${asyncUtil}(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -586,7 +670,23 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'waitForAsyncUtil' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + const { user, waitForAsyncUtil } = setup(); + await waitForAsyncUtil(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -617,7 +717,24 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'myAlias' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + const { user, waitForAsyncUtil } = setup(); + const myAlias = waitForAsyncUtil; + await myAlias(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -647,7 +764,23 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'waitForAsyncUtil' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + const { ...clone } = setup(); + await clone.waitForAsyncUtil(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -677,7 +810,23 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'myAlias' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + const { waitForAsyncUtil: myAlias } = setup(); + await myAlias(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -706,7 +855,22 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'waitForAsyncUtil' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + await setup().waitForAsyncUtil(); + }); + `, + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -736,7 +900,23 @@ ruleTester.run(RULE_NAME, rule, { data: { name: 'myAlias' }, }, ], - }) as const + output: ` + function setup() { + const utils = render(); + + const waitForAsyncUtil = () => { + return ${asyncUtil}(screen.queryByTestId('my-test-id')); + }; + + return { waitForAsyncUtil, ...utils }; + } + + test('unhandled promise from destructed property of async function wrapper is invalid', () => { + const myAlias = setup().waitForAsyncUtil; + await myAlias(); + }); + `, + } as const) ), ]), }); diff --git a/tests/lib/rules/no-await-sync-events.test.ts b/tests/lib/rules/no-await-sync-events.test.ts index da871acc..5116080e 100644 --- a/tests/lib/rules/no-await-sync-events.test.ts +++ b/tests/lib/rules/no-await-sync-events.test.ts @@ -264,7 +264,7 @@ ruleTester.run(RULE_NAME, rule, { data: { name: `fireEvent.${func}` }, }, ], - }) as const + } as const) ) ), // sync userEvent sync methods with await operator are not valid @@ -286,7 +286,7 @@ ruleTester.run(RULE_NAME, rule, { data: { name: `userEvent.${func}` }, }, ], - }) as const + } as const) ), { diff --git a/tests/lib/rules/no-await-sync-queries.test.ts b/tests/lib/rules/no-await-sync-queries.test.ts index 0896f817..3b088ad0 100644 --- a/tests/lib/rules/no-await-sync-queries.test.ts +++ b/tests/lib/rules/no-await-sync-queries.test.ts @@ -142,7 +142,7 @@ ruleTester.run(RULE_NAME, rule, { column: 31, }, ], - }) as const + } as const) ), // custom sync queries with await operator are not valid { @@ -192,7 +192,7 @@ ruleTester.run(RULE_NAME, rule, { column: 22, }, ], - }) as const + } as const) ), // sync queries in screen with await operator are not valid @@ -210,7 +210,7 @@ ruleTester.run(RULE_NAME, rule, { column: 38, }, ], - }) as const + } as const) ), // sync queries in screen with await operator inside assert are not valid @@ -228,7 +228,7 @@ ruleTester.run(RULE_NAME, rule, { column: 29, }, ], - }) as const + } as const) ), // sync query awaited and related to testing library module @@ -244,7 +244,7 @@ ruleTester.run(RULE_NAME, rule, { } `, errors: [{ messageId: 'noAwaitSyncQuery', line: 4, column: 38 }], - }) as const + } as const) ), // sync query awaited and related to custom module is not valid { diff --git a/tests/lib/rules/no-container.test.ts b/tests/lib/rules/no-container.test.ts index 5f3596a6..6967de9e 100644 --- a/tests/lib/rules/no-container.test.ts +++ b/tests/lib/rules/no-container.test.ts @@ -65,7 +65,7 @@ ruleTester.run(RULE_NAME, rule, { const { container } = render(); const button = container.querySelector('.btn-primary'); `, - }) as const + } as const) ), { settings: { @@ -123,7 +123,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noContainer', }, ], - }) as const + } as const) ), ...SUPPORTED_TESTING_FRAMEWORKS.map( (testingFramework) => @@ -144,7 +144,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noContainer', }, ], - }) as const + } as const) ), { code: ` @@ -214,7 +214,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noContainer', }, ], - }) as const + } as const) ), { settings: { diff --git a/tests/lib/rules/no-debugging-utils.test.ts b/tests/lib/rules/no-debugging-utils.test.ts index 7d6f1045..c41c6423 100644 --- a/tests/lib/rules/no-debugging-utils.test.ts +++ b/tests/lib/rules/no-debugging-utils.test.ts @@ -563,7 +563,7 @@ ruleTester.run(RULE_NAME, rule, { debug() `, errors: [{ line: 7, column: 7, messageId: 'noDebug' }], - }) as const + } as const) ), { settings: { 'testing-library/utils-module': 'test-utils' }, @@ -590,7 +590,7 @@ ruleTester.run(RULE_NAME, rule, { utils.debug() `, errors: [{ line: 7, column: 13, messageId: 'noDebug' }], - }) as const + } as const) ), { settings: { @@ -626,7 +626,7 @@ ruleTester.run(RULE_NAME, rule, { renamedDestructuredDebug('foo') `, errors: [{ line: 12, column: 13, messageId: 'noDebug' }], - }) as const + } as const) ), ], }); diff --git a/tests/lib/rules/no-dom-import.test.ts b/tests/lib/rules/no-dom-import.test.ts index e5fbce0c..2a4a10ac 100644 --- a/tests/lib/rules/no-dom-import.test.ts +++ b/tests/lib/rules/no-dom-import.test.ts @@ -206,7 +206,7 @@ ruleTester.run(RULE_NAME, rule, { isOldImport ? oldName : newName }") `, - }) as const + } as const) ) ), { diff --git a/tests/lib/rules/no-manual-cleanup.test.ts b/tests/lib/rules/no-manual-cleanup.test.ts index 88fc87f6..1f14312d 100644 --- a/tests/lib/rules/no-manual-cleanup.test.ts +++ b/tests/lib/rules/no-manual-cleanup.test.ts @@ -67,7 +67,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -83,7 +83,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -99,7 +99,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -116,7 +116,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { settings: { @@ -138,7 +138,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { settings: { @@ -160,7 +160,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { settings: { @@ -185,7 +185,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { settings: { @@ -211,7 +211,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -224,7 +224,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { settings: { @@ -249,7 +249,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -265,7 +265,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), ...ALL_TESTING_LIBRARIES_WITH_CLEANUP.map( (lib) => @@ -282,7 +282,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noManualCleanup', }, ], - }) as const + } as const) ), { code: ` diff --git a/tests/lib/rules/no-render-in-lifecycle.test.ts b/tests/lib/rules/no-render-in-lifecycle.test.ts index 1561b394..9665afcc 100644 --- a/tests/lib/rules/no-render-in-lifecycle.test.ts +++ b/tests/lib/rules/no-render-in-lifecycle.test.ts @@ -121,7 +121,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ...TESTING_FRAMEWORK_SETUP_HOOKS.map( (setupHook) => @@ -139,7 +139,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ]), // custom render function @@ -164,7 +164,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ...SUPPORTED_TESTING_FRAMEWORKS.flatMap((testingFramework) => [ ...TESTING_FRAMEWORK_SETUP_HOOKS.map( @@ -186,7 +186,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ...TESTING_FRAMEWORK_SETUP_HOOKS.map((allowedSetupHook) => { const [disallowedHook] = TESTING_FRAMEWORK_SETUP_HOOKS.filter( @@ -229,7 +229,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ]), ...TESTING_FRAMEWORK_SETUP_HOOKS.map( @@ -253,7 +253,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ), ...SUPPORTED_TESTING_FRAMEWORKS.flatMap((testingFramework) => TESTING_FRAMEWORK_SETUP_HOOKS.map( @@ -273,7 +273,7 @@ ruleTester.run(RULE_NAME, rule, { messageId: 'noRenderInSetup', }, ], - }) as const + } as const) ) ), ], diff --git a/tests/lib/rules/no-unnecessary-act.test.ts b/tests/lib/rules/no-unnecessary-act.test.ts index 3dcac3d8..2f1bce65 100644 --- a/tests/lib/rules/no-unnecessary-act.test.ts +++ b/tests/lib/rules/no-unnecessary-act.test.ts @@ -330,7 +330,7 @@ const invalidTestCases: InvalidTestCase[] = [ column: 9, }, ], - }) as const + } as const) ), { settings: { diff --git a/tests/lib/rules/no-wait-for-multiple-assertions.test.ts b/tests/lib/rules/no-wait-for-multiple-assertions.test.ts index 46f30b7e..8c3a3fec 100644 --- a/tests/lib/rules/no-wait-for-multiple-assertions.test.ts +++ b/tests/lib/rules/no-wait-for-multiple-assertions.test.ts @@ -125,7 +125,7 @@ ruleTester.run(RULE_NAME, rule, { errors: [ { line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' }, ], - }) as const + } as const) ), { settings: { 'testing-library/utils-module': 'test-utils' }, diff --git a/tests/lib/rules/no-wait-for-side-effects.test.ts b/tests/lib/rules/no-wait-for-side-effects.test.ts index 45475961..37f9a0ac 100644 --- a/tests/lib/rules/no-wait-for-side-effects.test.ts +++ b/tests/lib/rules/no-wait-for-side-effects.test.ts @@ -536,7 +536,7 @@ ruleTester.run(RULE_NAME, rule, { await waitFor(() => fireEvent.keyDown(input, {key: 'ArrowDown'})) `, errors: [{ line: 3, column: 29, messageId: 'noSideEffectsWaitFor' }], - }) as const + } as const) ), { settings: { 'testing-library/utils-module': '~/test-utils' }, diff --git a/tests/lib/rules/no-wait-for-snapshot.test.ts b/tests/lib/rules/no-wait-for-snapshot.test.ts index 03eff8f4..02eefece 100644 --- a/tests/lib/rules/no-wait-for-snapshot.test.ts +++ b/tests/lib/rules/no-wait-for-snapshot.test.ts @@ -179,7 +179,7 @@ ruleTester.run(RULE_NAME, rule, { column: 36 + asyncUtil.length, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -200,7 +200,7 @@ ruleTester.run(RULE_NAME, rule, { column: 27, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -219,7 +219,7 @@ ruleTester.run(RULE_NAME, rule, { column: 47 + asyncUtil.length, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -240,7 +240,7 @@ ruleTester.run(RULE_NAME, rule, { column: 27, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -259,7 +259,7 @@ ruleTester.run(RULE_NAME, rule, { column: 36 + asyncUtil.length, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -280,7 +280,7 @@ ruleTester.run(RULE_NAME, rule, { column: 27, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -299,7 +299,7 @@ ruleTester.run(RULE_NAME, rule, { column: 47 + asyncUtil.length, }, ], - }) as const + } as const) ), ...ASYNC_UTILS.map( (asyncUtil) => @@ -320,7 +320,7 @@ ruleTester.run(RULE_NAME, rule, { column: 27, }, ], - }) as const + } as const) ), ]), }); diff --git a/tests/lib/rules/prefer-explicit-assert.test.ts b/tests/lib/rules/prefer-explicit-assert.test.ts index 8cc09614..0b65a72f 100644 --- a/tests/lib/rules/prefer-explicit-assert.test.ts +++ b/tests/lib/rules/prefer-explicit-assert.test.ts @@ -187,7 +187,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -199,7 +199,7 @@ ruleTester.run(RULE_NAME, rule, { data: { queryType: 'findBy*' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -211,7 +211,7 @@ ruleTester.run(RULE_NAME, rule, { data: { queryType: 'findBy*' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -227,7 +227,7 @@ ruleTester.run(RULE_NAME, rule, { data: { queryType: 'findBy*' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -243,7 +243,7 @@ ruleTester.run(RULE_NAME, rule, { data: { queryType: 'findBy*' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -262,7 +262,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -278,7 +278,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -308,7 +308,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -328,7 +328,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -345,7 +345,7 @@ ruleTester.run(RULE_NAME, rule, { data: { assertion: 'toBeInTheDocument' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -362,7 +362,7 @@ ruleTester.run(RULE_NAME, rule, { data: { assertion: 'toBeInTheDocument' }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -379,7 +379,7 @@ ruleTester.run(RULE_NAME, rule, { data: { assertion: 'toBeInTheDocument' }, }, ], - }) as const + } as const) ), ], }); diff --git a/tests/lib/rules/prefer-find-by.test.ts b/tests/lib/rules/prefer-find-by.test.ts index 2f27043e..12978587 100644 --- a/tests/lib/rules/prefer-find-by.test.ts +++ b/tests/lib/rules/prefer-find-by.test.ts @@ -28,7 +28,7 @@ function buildFindByMethod(queryMethod: string) { function createScenario< T extends | TSESLint.InvalidTestCase - | TSESLint.ValidTestCase<[]>, + | TSESLint.ValidTestCase<[]> >(callback: (waitMethod: string, queryMethod: string) => T) { return SYNC_QUERIES_COMBINATIONS.map((queryMethod) => callback('waitFor', queryMethod) diff --git a/tests/lib/rules/prefer-implicit-assert.test.ts b/tests/lib/rules/prefer-implicit-assert.test.ts index c73ac0c7..973c45be 100644 --- a/tests/lib/rules/prefer-implicit-assert.test.ts +++ b/tests/lib/rules/prefer-implicit-assert.test.ts @@ -62,7 +62,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -78,7 +78,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -94,7 +94,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -110,7 +110,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -126,7 +126,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -142,7 +142,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -158,7 +158,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -174,7 +174,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -190,7 +190,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -206,7 +206,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -224,7 +224,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -242,7 +242,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -260,7 +260,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -278,7 +278,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -296,7 +296,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -312,7 +312,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -328,7 +328,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -344,7 +344,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -360,7 +360,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -376,7 +376,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -392,7 +392,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -408,7 +408,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -424,7 +424,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -440,7 +440,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -456,7 +456,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -474,7 +474,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -492,7 +492,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -510,7 +510,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -528,7 +528,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...COMBINED_QUERIES_METHODS.map( (queryMethod) => @@ -546,7 +546,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ], }); diff --git a/tests/lib/rules/prefer-screen-queries.test.ts b/tests/lib/rules/prefer-screen-queries.test.ts index b49ae2ad..4951233b 100644 --- a/tests/lib/rules/prefer-screen-queries.test.ts +++ b/tests/lib/rules/prefer-screen-queries.test.ts @@ -211,7 +211,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -231,7 +231,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( @@ -254,7 +254,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...SUPPORTED_TESTING_FRAMEWORKS.flatMap((testingFramework) => ALL_QUERIES_COMBINATIONS.map( @@ -275,7 +275,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ) ), ...ALL_QUERIES_COMBINATIONS.map( @@ -290,7 +290,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -304,7 +304,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -318,7 +318,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -335,7 +335,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -352,7 +352,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -369,7 +369,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -386,7 +386,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...ALL_QUERIES_COMBINATIONS.map( (queryMethod) => @@ -403,7 +403,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...SUPPORTED_TESTING_FRAMEWORKS.flatMap((testingFramework) => [ { diff --git a/tests/lib/rules/prefer-user-event.test.ts b/tests/lib/rules/prefer-user-event.test.ts index aae52d9b..61892761 100644 --- a/tests/lib/rules/prefer-user-event.test.ts +++ b/tests/lib/rules/prefer-user-event.test.ts @@ -13,7 +13,7 @@ import { createRuleTester } from '../test-utils'; function createScenarioWithImport< T extends | TSESLint.InvalidTestCase - | TSESLint.ValidTestCase, + | TSESLint.ValidTestCase >(callback: (libraryModule: string, fireEventMethod: string) => T) { return LIBRARY_MODULES.reduce( (acc: Array, libraryModule) => @@ -372,7 +372,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...Object.keys(MAPPING_TO_USER_EVENT).map( (fireEventMethod: string) => @@ -396,7 +396,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...Object.keys(MAPPING_TO_USER_EVENT).map( (fireEventMethod: string) => @@ -419,7 +419,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), ...Object.keys(MAPPING_TO_USER_EVENT).map( (fireEventMethod: string) => @@ -443,7 +443,7 @@ ruleTester.run(RULE_NAME, rule, { }, }, ], - }) as const + } as const) ), { code: ` // simple test to check error in detail diff --git a/tools/generate-configs/utils.ts b/tools/generate-configs/utils.ts index 9e979151..8bdb8741 100644 --- a/tools/generate-configs/utils.ts +++ b/tools/generate-configs/utils.ts @@ -26,7 +26,7 @@ export const writeConfig = async ( ): Promise => { // note: we use `export =` because ESLint will import these configs via a commonjs import const code = `export = ${JSON.stringify(config)};`; - const configStr = await format(addAutoGeneratedComment(code), { + const configStr = format(addAutoGeneratedComment(code), { parser: 'typescript', ...(await prettierConfig), });