Testing Tabs

Test utils

@react-spectrum/test-utils offers common tabs interaction testing utilities. Install it with your preferred package manager.

npm install @react-spectrum/test-utils --dev

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-spectrum/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.getTabs();
  expect(tabsTester.getSelectedTab()).toBe(tabs[0]);

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

API

User

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.

TabsTester

constructor(opts: ): void
setInteractionType(type: ['interactionType']): void
Set the interaction type used by the tabs tester.
findTab(opts: {
indexOrText: 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.
getTablist(): HTMLElement
Returns the tablist.
getTabpanels(): HTMLElement[]
Returns the tabpanels.
getTabs(): HTMLElement[]
Returns the tabs in the tablist.
getSelectedTab(): HTMLElementnull
Returns the currently selected tab in the tablist if any.
getActiveTabpanel(): HTMLElementnull
Returns the currently active tabpanel if any.

Testing FAQ