Test utils
@react-spectrum/test-utils offers common dialog interaction testing utilities. Install it with your preferred package manager.
npm install @react-spectrum/test-utils --dev
Requirements
Please note that this library uses @testing-library/dom@10 and @testing-library/user-event@14. This means that you need to be on React 18+ in order for these utilities to work.
Initialize a User object at the top of your test file, and use it to create a Dialog pattern tester in your test cases. The tester has methods that you can call within your test to query for specific subcomponents or simulate common interactions.
// Dialog.test.ts
import {render} from '@testing-library/react';
import {User} from '@react-spectrum/test-utils';
let testUtilUser = new User({
interactionType: 'mouse',
advanceTimer: jest.advanceTimersByTime
});
// ...
it('Dialog can be opened and closed', async function () {
// Render your test component/app and initialize the dialog tester
let {getByTestId, getByRole} = render(
<DialogTrigger>
<ActionButton>Trigger</ActionButton>
<Dialog>
...
</Dialog>
</DialogTrigger>
);
let button = getByRole('button');
let dialogTester = testUtilUser.createTester('Dialog', {root: button, overlayType: 'modal'});
await dialogTester.open();
let dialog = dialogTester.getDialog();
expect(dialog).toBeVisible();
await dialogTester.close();
expect(dialog).not.toBeInTheDocument();
});
API
User
Properties
| Name | Type | Default |
|---|---|---|
advanceTimer | UserOpts['advanceTimer'] | Default: — |
| A function used by the test utils to advance timers during interactions. Required for certain aria patterns (e.g. table). | ||
interactionType | UserOpts['interactionType'] | Default: mouse
|
| The interaction type (mouse, touch, keyboard) that the test util user will use when interacting with a component. This can be overridden at the aria pattern util level if needed. | ||
Methods
constructor | ||
createTester | ||
| Creates an aria pattern tester, inheriting the options provided to the original user. | ||
DialogTester
constructor | ||
setInteractionType | ||
| Set the interaction type used by the dialog tester. | ||
open | ||
| Opens the dialog. Defaults to using the interaction type set on the dialog tester. | ||
close | ||
| Closes the dialog via the Escape key. | ||
getTrigger | ||
| Returns the dialog's trigger. | ||
getDialog | ||
| Returns the dialog if present. | ||