testing-library / dom-testing-library

🐙 Simple and complete DOM testing utilities that encourage good testing practices.
https://testing-library.com/dom
MIT License
3.26k stars 466 forks source link

Support for sharing matching details between getByRole & queryByRole #1227

Open flakey-bit opened 1 year ago

flakey-bit commented 1 year ago

Describe the feature you'd like:

When writing tests we'll often write a positive test i.e. something appears when we expect it to with a corresponding negative test i.e. it doesn't appear when it shouldn't.

For various reasons we want to keep things DRY (e.g. if the text changes, we don't want false-negatives in the negative test).

At the moment, the best we can come up with is

const warningMatcher: [ByRoleMatcher, ByRoleOptions] = [
  (content, element) => content === "status" && element?.textContent?.includes("The file has warning(s) that may affect how your data will import"),
  {}
];

Then

// Positive case i.e. we're looking for the warning
expect(screen.getByRole(...warningMatcher)).toBeInTheDocument();

// Negative case i.e. we're asserting the warning does not appear
expect(screen.queryByRole(...warningMatcher)).not.toBeInTheDocument();

Wondering if API changes could make this (surely common?) use-case easier.