UNPKG

@testing-library/react-native

Version:

Simple and complete React Native testing utilities that encourage good testing practices.

199 lines (135 loc) 5.48 kB
# Jest matchers This guide covers the built-in Jest matchers. These matchers make your tests easier to read and work better with accessibility features. ## Setup No setup needed. Matchers are available when you import from `@testing-library/react-native`. ## Checking element existence ### `toBeOnTheScreen()` ```ts expect(element).toBeOnTheScreen(); ``` Checks if an element is attached to the element tree. If you have a reference to an element and it gets unmounted during the test, this assertion will fail. ## Element Content ### `toHaveTextContent()` ```ts expect(element).toHaveTextContent( text: string | RegExp, options?: { exact?: boolean; normalizer?: (text: string) => string; }, ) ``` Checks if an element has the specified text content. Accepts `string` or `RegExp`, with optional [text match options](./queries.md#text-match-options) like `exact` and `normalizer`. ### `toContainElement()` ```ts expect(container).toContainElement( instance: TestInstance | null, ) ``` Checks if a container element contains another element. ### `toBeEmptyElement()` ```ts expect(element).toBeEmptyElement(); ``` Checks if an element has no child elements or text content. ## Checking element state ### `toHaveDisplayValue()` ```ts expect(element).toHaveDisplayValue( value: string | RegExp, options?: { exact?: boolean; normalizer?: (text: string) => string; }, ) ``` Checks if a `TextInput` has the specified display value. Accepts `string` or `RegExp`, with optional [text match options](./queries.md#text-match-options) like `exact` and `normalizer`. ### `toHaveAccessibilityValue()` ```ts expect(element).toHaveAccessibilityValue( value: { min?: number; max?: number; now?: number; text?: string | RegExp; }, ) ``` Checks if an element has the specified accessible value. The matcher reads accessibility values from `aria-valuemin`, `aria-valuemax`, `aria-valuenow`, `aria-valuetext`, and `accessibilityValue` props. It only checks the values you specify, so the element can have other accessibility value entries and still match. For the `text` entry, you can use a string or `RegExp`. ### `toBeEnabled()` / `toBeDisabled` ```ts expect(element).toBeEnabled(); expect(element).toBeDisabled(); ``` Checks if an element is enabled or disabled from `aria-disabled` or `accessibilityState.disabled` props. An element is disabled if it or any ancestor is disabled. > [!NOTE] > These matchers are opposites. Both are available so you can avoid double negations like `expect(element).not.toBeDisabled()`. ### `toBeSelected()` ```ts expect(element).toBeSelected(); ``` Checks if an element is selected from `aria-selected` or `accessibilityState.selected` props. ### `toBeChecked()` / `toBePartiallyChecked()` ```ts expect(element).toBeChecked(); expect(element).toBePartiallyChecked(); ``` Checks if an element is checked or partially checked from `aria-checked` or `accessibilityState.checked` props. > [!NOTE] > > - `toBeChecked()` only works on `Switch` host elements and elements with `checkbox`, `radio`, or `switch` role. > - `toBePartiallyChecked()` only works on elements with `checkbox` role. ### `toBeExpanded()` / `toBeCollapsed()` ```ts expect(element).toBeExpanded(); expect(element).toBeCollapsed(); ``` Checks if an element is expanded or collapsed from `aria-expanded` or `accessibilityState.expanded` props. > [!NOTE] > These matchers are opposites for expandable elements (those with explicit `aria-expanded` or `accessibilityState.expanded` props). For non-expandable elements, neither matcher will pass. ### `toBeBusy()` ```ts expect(element).toBeBusy(); ``` Checks if an element is busy from `aria-busy` or `accessibilityState.busy` props. ## Checking element style ### `toBeVisible()` ```ts expect(element).toBeVisible(); ``` Checks if an element is visible. An element is invisible if it or any ancestor has `display: none` or `opacity: 0` styles, or if it's hidden from accessibility. ### `toHaveStyle()` ```ts expect(element).toHaveStyle( style: StyleProp<Style>, ) ``` Checks if an element has specific styles. ## Other matchers ### `toHaveAccessibleName()` ```ts expect(element).toHaveAccessibleName( name?: string | RegExp, options?: { exact?: boolean; normalizer?: (text: string) => string; }, ) ``` Checks if an element has the specified accessible name. Accepts `string` or `RegExp`, with optional [text match options](./queries.md#text-match-options) like `exact` and `normalizer`. The accessible name comes from `aria-labelledby`, `accessibilityLabelledBy`, `aria-label`, and `accessibilityLabel` props. For `Image` elements, the `alt` prop is also used. If none are present, the element's text content is used. When `accessibilityLabelledBy` references multiple elements with an array, their text content is joined with spaces in the referenced order and matched as a single accessible name. `aria-labelledby` follows React Native's single `nativeID` value behavior. Without a `name` parameter (or with `undefined`), it only checks whether the element has any accessible name. ### `toHaveProp()` ```ts expect(element).toHaveProp( name: string, value?: unknown, ) ``` Checks if an element has a prop. Without a `value` (or with `undefined`), it only checks if the prop exists. With a `value`, it checks if the prop's value matches. > [!NOTE] > Use this matcher as a last resort when other matchers don't fit your needs.