testing-library / eslint-plugin-testing-library

ESLint plugin to follow best practices and anticipate common mistakes when writing tests with Testing Library
https://npm.im/eslint-plugin-testing-library
MIT License
992 stars 142 forks source link

`testing-library/await-async-queries` false positives with optional chaining `?.` #882

Open tronguye opened 9 months ago

tronguye commented 9 months ago

Have you read the Troubleshooting section?

Yes

Plugin version

6.2.0

ESLint version

8.45.0

Node.js version

18.16.0

package manager and version

yarn 1.22.19

Operating system

Windows 10 Enterprise version 22H2

Bug description

await renderResult?.findBy* is reporting testing-library/await-async-queries, even though the query is in fact getting awaited

Steps to reproduce

  1. Go to a test file
  2. Add code like

    it('...', async () => {
    let renderResult: RenderResult | undefined;
    renderResult = render(<div>text</div>);
    
    expect(await renderResult?.findByText('text')).toBeDefined();
    ));
  3. Observe error reported on line with expect, when we are in fact awaiting the returned promise of findByText

Error output/screenshots

No response

ESLint configuration

{
  ...,
  plugins: [
     ...,
     'eslint-plugin-testing-library'
  ],
  rules: {
    ...,
    'testing-library/await-async-queries': 'error'
  }
}

Rule(s) affected

testing-library/await-async-queries

Anything else?

No response

Do you want to submit a pull request to fix this bug?

No

Belco90 commented 9 months ago

Thanks for reporting. Indeed, the rule doesn't take optional chaining into account properly. Bear in mind that's a really strange way of asserting if the element is present tho.