Tree supports long press interactions on its rows in certain configurations. See the following sections on how to handle these behaviors in your tests.
@react-aria/test-utils offers common tree interaction testing utilities. Install it with your preferred package manager.
Initialize a User object at the top of your test file, and use it to create a Tree 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.
// Tree.test.tsimport {render, within} from'@testing-library/react';
import {User} from'@react-aria/test-utils';
lettestUtilUser = new User({
interactionType: 'mouse'
});
// ...it('Tree can select and expand a item via keyboard', asyncfunction () {
// Render your test component/app and initialize the Tree testerlet {getByTestId} = render(
<Tree data-testid="test-tree"selectionMode="multiple">
...
</Tree>
);
lettreeTester = testUtilUser.createTester('Tree', {root: getByTestId('test-tree'), interactionType: 'keyboard'});
awaittreeTester.toggleRowSelection({row: 0});
expect(treeTester.selectedRows).toHaveLength(1);
expect(within(treeTester.rows[0]).getByRole('checkbox')).toBeChecked();
awaittreeTester.toggleRowSelection({row: 1});
expect(treeTester.selectedRows).toHaveLength(2);
expect(within(treeTester.rows[1]).getByRole('checkbox')).toBeChecked();
awaittreeTester.toggleRowSelection({row: 0});
expect(treeTester.selectedRows).toHaveLength(1);
expect(within(treeTester.rows[0]).getByRole('checkbox')).not.toBeChecked();
awaittreeTester.toggleRowExpansion({index: 0});
expect(treeTester.rows[0]).toHaveAttribute('aria-expanded', 'true');
});
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.
Toggles the selection for the specified tree row. Defaults to using the interaction type set on the tree tester.
Note that this will endevor to always add/remove JUST the provided row to the set of selected rows.
Returns the tree's cells if any. Can be filtered against a specific row if provided via element.
Testing FAQ
In cases like this, first double check your test setup and make sure that your test is rendering your tree in its expected state before the test util interaction call. If everything looks correct, you can always fall back to simulating interactions manually, and using the test util to query your tree's state post interaction.
Whenever the tree tester queries its elements or triggers a user flow, it does so against the current state of the tree. Therefore the tree tester can be used alongside whatever simulated user flow you add.