Testing Tabs

Test utils

@react-aria/test-utils offers common tabs 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 Tabs 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.

// Tabs.test.ts
import {render} from '@testing-library/react';
import {User} from '@react-aria/test-utils';

let testUtilUser = new User({
  interactionType: 'mouse'
});
// ...

it('Tabs can change selection via keyboard', async function () {
  // Render your test component/app and initialize the listbox tester
  let {getByTestId} = render(
    <Tabs data-testid="test-tabs">
      ...
    </Tabs>
  );
  let tabsTester = testUtilUser.createTester('Tabs', {root: getByTestId('test-tabs'), interactionType: 'keyboard'});

  let tabs = tabsTester.tabs;
  expect(tabsTester.selectedTab).toBe(tabs[0]);

  await tabsTester.triggerTab({tab: 1});
  expect(tabsTester.selectedTab).toBe(tabs[1]);
});

API

Properties

NameTypeDefault
advanceTimer['advanceTimer']Default:
A function used by the test utils to advance timers during interactions. Required for certain aria patterns (e.g. table).
interactionType['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(opts: ): void
createTester<T extends >(patternName: T, opts: <T>): <T>
Creates an aria pattern tester, inheriting the options provided to the original user.

Properties

NameType
activeTabpanelHTMLElementnull
Returns the currently active tabpanel if any.
selectedTabHTMLElementnull
Returns the currently selected tab in the tablist if any.
tabsHTMLElement[]
Returns the tabs in the tablist.
tabpanelsHTMLElement[]
Returns the tabpanels.
tablistHTMLElement
Returns the tablist.

Methods

constructor(opts: ): void
setInteractionType(type: ['interactionType']): void
Set the interaction type used by the tabs tester.
findTab(opts: {
tabIndexOrText: numberstring
}): HTMLElement
Returns a tab matching the specified index or text content.
triggerTab(opts: ): Promise<void>
Triggers the specified tab. Defaults to using the interaction type set on the tabs tester.

Testing FAQ