diff --git a/lib/node-utils/index.ts b/lib/node-utils/index.ts index 0343e61f..a3211c1f 100644 --- a/lib/node-utils/index.ts +++ b/lib/node-utils/index.ts @@ -278,6 +278,10 @@ function getRootExpression( return parent.expressions[parent.expressions.length - 1] === expression ? getRootExpression(parent) : expression; + + case AST_NODE_TYPES.ChainExpression: + return getRootExpression(parent); + default: return expression; } diff --git a/tests/lib/rules/await-async-queries.test.ts b/tests/lib/rules/await-async-queries.test.ts index efab2cbd..ebc48035 100644 --- a/tests/lib/rules/await-async-queries.test.ts +++ b/tests/lib/rules/await-async-queries.test.ts @@ -93,6 +93,21 @@ ruleTester.run(RULE_NAME, rule, { // async screen queries declaration are valid ...createTestCase((query) => `await screen.${query}('foo')`), + // async queries with optional chaining are valid + ...createTestCase((query) => `await screen?.${query}('foo')`), + + ...createTestCase( + (query) => ` + it('test case', async () => { + let renderResult: RenderResult | undefined; + + renderResult = render(
text
); + + expect(await renderResult?.${query}('text')).toBeDefined(); + }); + ` + ), + // async @marko/testing-library screen queries declaration are valid ...createTestCase((query) => `await screen.${query}('foo')`, { testingFramework: '@marko/testing-library',