babylon-testing-library
Version:
Simple utilities that encourage good testing practices for Babylon.js
56 lines • 2.32 kB
JavaScript
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