UNPKG

babylon-testing-library

Version:

Simple utilities that encourage good testing practices for Babylon.js

56 lines 2.32 kB
import { waitFor } from '@testing-library/dom'; import { findAllMatchingDescendants } from './queries/utils'; export function getMultipleElementsFoundError(message, container) { return new Error(`${message}\n\n(If this is intentional, then use the \`*AllBy*\` variant of the query (like \`queryAllByText\`, \`getAllByText\`, or \`findAllByText\`)). Container: ${container}`); } export function queryAllByAttribute(attribute, container, value) { return findAllMatchingDescendants(container, (control) => control[attribute] === value); } export function queryByAttribute(attribute, container, value) { const controls = queryAllByAttribute(attribute, container, value); if (controls.length === 0) { return null; } if (controls.length > 1) { throw getMultipleElementsFoundError(`Found multiple elements by [${attribute}=${value}]`, container); } return controls[0]; } export function buildQueries(queryAllBy, getMultipleError, getMissingError) { const queryBy = (container, matcher) => { const result = queryAllBy(container, matcher); if (result.length === 0) { return null; } if (result.length > 1) { throw getMultipleElementsFoundError(getMultipleError(container, `${matcher}`), container); } return result[0]; }; const getAllBy = (container, matcher) => { const result = queryAllBy(container, matcher); if (result.length === 0) { throw new Error(getMissingError(container, `${matcher}`)); } return result; }; const getBy = (container, matcher) => { const result = getAllBy(container, matcher); if (result.length > 1) { throw getMultipleElementsFoundError(getMultipleError(container, `${matcher}`), container); } return result[0]; }; const findAllBy = (container, matcher, waitForOptions) => { return waitFor(() => { return getAllBy(container, matcher); }, waitForOptions); }; const findBy = (container, matcher, waitForOptions) => { return waitFor(() => { return getBy(container, matcher); }, waitForOptions); }; return { queryBy, getAllBy, getBy, findAllBy, findBy }; } //# sourceMappingURL=query-helpers.js.map