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
969 stars 135 forks source link

Disallow using findBy* inside a waitFor block #910

Open neriyarden opened 6 days ago

neriyarden commented 6 days ago

Name for new rule

no-findby-in-waitfor

Description of the new rule

This new rule should prevent the usage of a findBy* method inside a waitFor.

Testing Library feature

waitFor and findBy

Testing Library framework(s)

all

What category of rule is this?

Suggests an alternate way of doing something

Optional: other category of rule

No response

Code examples

Incorrect usage

await waitFor(() => {
  const button = await findByRole("button", { name: "Submit" });
  expect(button).toBeInTheDocument()
};

Correct usage

  const button = await findByRole("button", { name: "Submit" });
  expect(button).toBeInTheDocument()

Anything else?

No response

Do you want to submit a pull request to make the new rule?

Yes

Belco90 commented 6 days ago

Thanks for your idea! I'd update the current prefer-find-by to report this case, instead of creating a new rule. We would need to update the rule description so it indicates that suggests using findBy queries instead of waitFor + queries to wait for elements.