mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-18 05:13:29 -05:00
31 lines
996 B
TypeScript
31 lines
996 B
TypeScript
|
import { MatcherFunction } from '@testing-library/react'
|
||
|
|
||
|
type Query = (f: MatcherFunction) => Element | Promise<Element>
|
||
|
|
||
|
/*
|
||
|
Utility function to run testing-library queries over nodes that contain html tags, as in
|
||
|
`<p>this includes some <strong>bold</strong> text</p>`.
|
||
|
|
||
|
Usage:
|
||
|
const getByTextWithMarkup = withMarkup(screen.getByText)
|
||
|
getByTextWithMarkup('this includes some bold text')
|
||
|
|
||
|
const findByTextWithMarkup = withMarkup(screen.findByText)
|
||
|
await findByTextWithMarkup('this includes some bold text')
|
||
|
*/
|
||
|
const withMarkup =
|
||
|
(query: Query) =>
|
||
|
(text: string): Element | Promise<Element> =>
|
||
|
query((content: string, node: Element | null) => {
|
||
|
if (!node) {
|
||
|
return false
|
||
|
}
|
||
|
const hasText = (node: Element) => node.textContent === text
|
||
|
const childrenDontHaveText = Array.from(node.children).every(
|
||
|
child => !hasText(child as HTMLElement)
|
||
|
)
|
||
|
return hasText(node) && childrenDontHaveText
|
||
|
})
|
||
|
|
||
|
export default withMarkup
|