@testing-library/react-native
Version:
Simple and complete React Native testing utilities that encourage good testing practices.
73 lines (65 loc) • 2.48 kB
text/typescript
import type { ReactTestInstance } from 'react-test-renderer';
import { findAll } from '../helpers/findAll';
import { matches, TextMatch, TextMatchOptions } from '../matches';
import { isHostTextInput } from '../helpers/host-component-names';
import { makeQueries } from './makeQueries';
import type {
FindAllByQuery,
FindByQuery,
GetAllByQuery,
GetByQuery,
QueryAllByQuery,
QueryByQuery,
} from './makeQueries';
import type { CommonQueryOptions } from './options';
type ByPlaceholderTextOptions = CommonQueryOptions & TextMatchOptions;
const matchPlaceholderText = (
node: ReactTestInstance,
placeholder: TextMatch,
options: TextMatchOptions = {}
) => {
const { exact, normalizer } = options;
return matches(placeholder, node.props.placeholder, normalizer, exact);
};
const queryAllByPlaceholderText = (
instance: ReactTestInstance
): QueryAllByQuery<TextMatch, ByPlaceholderTextOptions> =>
function queryAllByPlaceholderFn(placeholder, queryOptions) {
return findAll(
instance,
(node) =>
isHostTextInput(node) &&
matchPlaceholderText(node, placeholder, queryOptions),
queryOptions
);
};
const getMultipleError = (placeholder: TextMatch) =>
`Found multiple elements with placeholder: ${String(placeholder)} `;
const getMissingError = (placeholder: TextMatch) =>
`Unable to find an element with placeholder: ${String(placeholder)}`;
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
queryAllByPlaceholderText,
getMissingError,
getMultipleError
);
export type ByPlaceholderTextQueries = {
getByPlaceholderText: GetByQuery<TextMatch, ByPlaceholderTextOptions>;
getAllByPlaceholderText: GetAllByQuery<TextMatch, ByPlaceholderTextOptions>;
queryByPlaceholderText: QueryByQuery<TextMatch, ByPlaceholderTextOptions>;
queryAllByPlaceholderText: QueryAllByQuery<
TextMatch,
ByPlaceholderTextOptions
>;
findByPlaceholderText: FindByQuery<TextMatch, ByPlaceholderTextOptions>;
findAllByPlaceholderText: FindAllByQuery<TextMatch, ByPlaceholderTextOptions>;
};
export const bindByPlaceholderTextQueries = (
instance: ReactTestInstance
): ByPlaceholderTextQueries => ({
getByPlaceholderText: getBy(instance),
getAllByPlaceholderText: getAllBy(instance),
queryByPlaceholderText: queryBy(instance),
queryAllByPlaceholderText: queryAllBy(instance),
findByPlaceholderText: findBy(instance),
findAllByPlaceholderText: findAllBy(instance),
});