Skip to main content

toBeAccessibleTooltip()

Note

This design pattern is work in progress; it does not yet have ARIA Authoring Practices Task Force consensus. Progress and discussions are captured here.

A tooltip is a popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.

It typically appears after a small delay and disappears when Escape is pressed or on mouse out. Tooltip widgets do not receive focus.

Hey, listen!

Usage

The toBeAccessibleTooltip matcher expects to be called on the tooltip trigger. The tooltip element will be obtained through the aria-describedby reference on the trigger element.

Syntax

import { render, screen } from '@testing-library/react'
import { Tooltip } from 'your-component-library'

test('tooltip', () => {
render(<Tooltip content="tooltip content">Hey, listen!</Tooltip>)

expect(screen.getByTestId('tooltip-trigger')).toBeAccessibleTooltip()
})

Test Summary

The matcher tests the following:

✓ trigger element is part of tab sequence
✓ trigger element has attribute aria-describedby
✓ tooltip element has role tooltip
✓ tooltip element is accessible when trigger is focused
✓ tooltip element is hidden on {Escape}

WAI-ARIA Roles, States, and Properties

1. The widget has a role of tooltip.

<!-- ✓ element has role tooltip -->
<div role="tooltip">hey, listen!</div>

<!-- ❌ element has role tooltip -->
<span>hey, listen!</span>

2. The tooltip trigger references the tooltip element with aria-describedby.

<!-- ✓ trigger element has aria-describedby -->
<div aria-describedby="tooltip-content">hover me</div>
<div id="tooltip-content" role="tooltip">hey, listen!</div>

<!-- ❌ trigger element has aria-describedby -->
<div>hover me</div>
<div id="tooltip-content" role="tooltip">hey, listen!</div>

Keyboard Interaction

  • Tab: focuses the trigger element.
  • Escape: dismisses the tooltip element.

External Resources

Web Accessibility Initiative