diff --git a/lib/node-utils/index.ts b/lib/node-utils/index.ts index a3211c1f..4aa8a472 100644 --- a/lib/node-utils/index.ts +++ b/lib/node-utils/index.ts @@ -378,6 +378,10 @@ export function getPropertyIdentifierNode( return getPropertyIdentifierNode(node.expression); } + if (ASTUtils.isAwaitExpression(node)) { + return getPropertyIdentifierNode(node.argument); + } + return null; } diff --git a/lib/rules/no-wait-for-multiple-assertions.ts b/lib/rules/no-wait-for-multiple-assertions.ts index b4df2a73..ed403068 100644 --- a/lib/rules/no-wait-for-multiple-assertions.ts +++ b/lib/rules/no-wait-for-multiple-assertions.ts @@ -1,10 +1,7 @@ import { TSESTree } from '@typescript-eslint/utils'; import { createTestingLibraryRule } from '../create-testing-library-rule'; -import { - getPropertyIdentifierNode, - isExpressionStatement, -} from '../node-utils'; +import { getPropertyIdentifierNode } from '../node-utils'; export const RULE_NAME = 'no-wait-for-multiple-assertions'; export type MessageIds = 'noWaitForMultipleAssertion'; @@ -38,10 +35,6 @@ export default createTestingLibraryRule({ body: Array ): Array { return body.filter((node) => { - if (!isExpressionStatement(node)) { - return false; - } - const expressionIdentifier = getPropertyIdentifierNode(node); if (!expressionIdentifier) { return false; 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..2cdbe093 100644 --- a/tests/lib/rules/no-wait-for-side-effects.test.ts +++ b/tests/lib/rules/no-wait-for-side-effects.test.ts @@ -112,6 +112,16 @@ ruleTester.run(RULE_NAME, rule, { // Side effects are allowed inside .then() userEvent.click(button); }) + `, + }, + { + code: ` + import { waitFor } from '${testingFramework}'; + import { notUserEvent } from 'somewhere-else'; + + waitFor(() => { + await notUserEvent.click(button) + }) `, }, ]), @@ -797,5 +807,21 @@ ruleTester.run(RULE_NAME, rule, { ], } as const, ]), + + ...SUPPORTED_TESTING_FRAMEWORKS.flatMap((testingFramework) => [ + { + code: ` + import { waitFor } from '${testingFramework}'; + import userEvent from '@testing-library/user-event' + + it("some test", async () => { + await waitFor(async () => { + await fireEvent.click(screen.getByTestId("something")); + }); + }); + `, + errors: [{ line: 7, column: 13, messageId: 'noSideEffectsWaitFor' }], + }, + ]), ], });