Generics not supported when using bound functions
JohnMarsden24 opened this issue · comments
Describe the feature you'd like:
Happy to give this a try myself!
I've found myself repeating the same pattern of typecasting elements returned from queries when using render
when I need to access specific element properties as the return type for queries is always HTMLElement
as seen in the two below screenshots:
![Screenshot 2024-04-21 at 19 10 59](https://private-user-images.githubusercontent.com/55828757/324278484-62dee759-d219-4ca3-8545-2d3a5a6ed282.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI3OTU2ODUsIm5iZiI6MTcyMjc5NTM4NSwicGF0aCI6Ii81NTgyODc1Ny8zMjQyNzg0ODQtNjJkZWU3NTktZDIxOS00Y2EzLTg1NDUtMmQzYTVhNmVkMjgyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA0VDE4MTYyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJlMDcyYzk0NmYwNWIyYjYwOWYyYWJmNmZhNGIwZWNlMmQ5YzQyOWQ2NjRlNzc5MWRjYzgxMTY0NjI3NmMxMTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.aDqUTAImiTT431rE7BfVjUOHME--WgFN7mTyF-LSEI8)
![Screenshot 2024-04-21 at 19 12 54](https://private-user-images.githubusercontent.com/55828757/324278489-7afcde4a-dd67-42bc-a1b2-3c5a7456d9f2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI3OTU2ODUsIm5iZiI6MTcyMjc5NTM4NSwicGF0aCI6Ii81NTgyODc1Ny8zMjQyNzg0ODktN2FmY2RlNGEtZGQ2Ny00MmJjLWExYjItM2M1YTc0NTZkOWYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA0VDE4MTYyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTlkZGJlNTdkZjk3MzgwYzQ0ZjBlMzQ4NTA1NDQxOTU5MmE4NWNhOTU4OGY5Y2M0MGYxYzdkZDQwNGRhYmI3YzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.DXmIwiScHzLmZP7Lo45WZJmjCAFz6N22-ZzH710P0IM)
Suggested implementation:
Firstly I thought about using function overloads and literal types to fix this problem but then realised any HTML element can be assigned a role
so I then thought about using generics and came across this old issue which was implemented several years ago. In that thread it said the generics got lost when using screen
, which was addressed and fixed but it looks like the same problem applies to render
.
I imagine the fix will be similar to that found when adding generics to screen queries
Describe alternatives you've considered:
Open to suggestions
Teachability, Documentation, Adoption, Migration Strategy:
Allow users to pass generics to queries returned from render
:
![Screenshot 2024-04-21 at 21 34 23](https://private-user-images.githubusercontent.com/55828757/324279062-cac16b19-62c5-4748-b041-a10b6af73bfa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI3OTU2ODUsIm5iZiI6MTcyMjc5NTM4NSwicGF0aCI6Ii81NTgyODc1Ny8zMjQyNzkwNjItY2FjMTZiMTktNjJjNS00NzQ4LWIwNDEtYTEwYjZhZjczYmZhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA0VDE4MTYyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE1YjcxMjk3YzBlYjRhN2ZjYjA1MjFkNTFkNTRhZmI5MDgwZTIxYjcxN2EzZTVjZmU3NzcwMDkyMDY1ZmRiNGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.D-u0NYhjc-fNl7hzWjpAxD9OiXhAwbK4H6neBw3l_E4)
I think this will be solved by importing a screen object.
import { screen } from 'react-testing-library';
expect(screen.getByRole<HTMLAnchorElement>('link').href).toEqual(...);