The one query to rule them all.
Most UI is pretty static.
Queries such as getBy*
are more than enough to make assertions.
However, when you put it all together, a UI will be asynchronous.
This library helps simplify test coverage in finding specific accessible UI with specific state.
For example, imagine a user action disables an input element. The test coverage would look something like:
// Without
const node = await waitFor(() => {
const node = screen.findByLabelText('Some input');
if (node.getAttribute('disabled') !== '') {
throw new Error('Unable to find disabled input.')
}
return node;
});
expect(node).toBeDisabled();
// With
expect(await query('Some input', { disabled: '' })).toBeDisabled();
- Install
accessible-query
- Import into test file
await
the result- ???
- Profit!
- Better error messaging -- provide context based on DOM / element state
- Better
aria-*
attribute support - Better boolean attribute support (e.g.
{ disabled: true }
matches on{ disabled: '' }
)