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

In FindAllBy and FindAll query helper types: spread Arguments to support no arguments #1230

Open dturcotte opened 1 year ago

dturcotte commented 1 year ago

What: Custom queries returned by buildQueries whose implementation required no arguments (besides container) still required one argument for find* and findAll* even when used on screen or within.

Without the query-helpers.d.ts changes introduced by this PR, see these TS errors in the updated type-tests: Screen Shot 2023-05-05 at 11 48 12 AM

Why: There was a lot of great work done on these types here and here, I want to build on that to solve this one additional edge case.

For context on why we have queries with no arguments: we have a library with UI components that other teams consume. We also provide a few custom queries for things we don't want the consumers to worry about. For example: We provide a DataGrid component with the option to select rows. It's possible to find the input to select a row using base testing-library features but consumers shouldn't need to know how the sausage is made, for their convenience we want them to be able to simply say: await userEvent.click(within(row).getGridRowSelectionInput())

This works, however I noticed that for the find and findAll queries the first arg is always required. It would end up looking like this to make TS happy: await within(row).findGridRowSelectionInput(undefined)

How: Spreading Arguments in FindBy and FindAllBy types would fix this; the resulting queries should better match the types passed into buildQueries. If there are no arguments after container then the resulting query would have two: container and waitForOptions. This would also allow for more than two args if needed. Lastly, this doesn't change the fact that container is required:

Screen Shot 2023-05-05 at 11 46 16 AM

Checklist:

codesandbox-ci[bot] commented 1 year ago

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 0781b30edecdefb938e99c537c1569e061a12d63:

Sandbox Source
react-testing-library-examples Configuration
codecov[bot] commented 1 year ago

Codecov Report

Merging #1230 (0781b30) into main (39a64d4) will not change coverage. The diff coverage is n/a.

@@            Coverage Diff            @@
##              main     #1230   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           24        24           
  Lines         1042      1042           
  Branches       351       347    -4     
=========================================
  Hits          1042      1042           
Flag Coverage Δ
node-14 100.00% <ø> (ø)
node-16 100.00% <ø> (ø)
node-18 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more