Skip to content

Commit 7f25d04

Browse files
committed
feat(pure): add renderOptions support to render
1 parent c1f2957 commit 7f25d04

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

types/index.d.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ export interface RenderOptions<
8787
Q extends Queries = typeof queries,
8888
Container extends RendererableContainer | HydrateableContainer = HTMLElement,
8989
BaseElement extends RendererableContainer | HydrateableContainer = Container,
90+
LegacyRoot extends boolean = boolean,
91+
Hydrate extends boolean = boolean
9092
> {
9193
/**
9294
* By default, React Testing Library will create a div and append that div to the document.body. Your React component will be rendered in the created div. If you provide your own HTMLElement container via this option,
@@ -111,13 +113,13 @@ export interface RenderOptions<
111113
*
112114
* @see https://testing-library.com/docs/react-testing-library/api/#hydrate)
113115
*/
114-
hydrate?: boolean
116+
hydrate?: Hydrate
115117
/**
116118
* Only works if used with React 18.
117119
* Set to `true` if you want to force synchronous `ReactDOM.render`.
118120
* Otherwise `render` will default to concurrent React if available.
119121
*/
120-
legacyRoot?: boolean
122+
legacyRoot?: LegacyRoot
121123
/**
122124
* Queries to bind. Overrides the default set from DOM Testing Library unless merged.
123125
*
@@ -131,6 +133,11 @@ export interface RenderOptions<
131133
* @see https://testing-library.com/docs/react-testing-library/api/#wrapper
132134
*/
133135
wrapper?: React.JSXElementConstructor<{children: React.ReactNode}>
136+
renderOptions?: LegacyRoot extends true ?
137+
never :
138+
Hydrate extends true ?
139+
ReactDOMClient.HydrationOptions :
140+
ReactDOMClient.RootOptions
134141
}
135142

136143
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
@@ -142,9 +149,11 @@ export function render<
142149
Q extends Queries = typeof queries,
143150
Container extends RendererableContainer | HydrateableContainer = HTMLElement,
144151
BaseElement extends RendererableContainer | HydrateableContainer = Container,
152+
LegacyRoot extends boolean = boolean,
153+
Hydrate extends boolean = boolean
145154
>(
146155
ui: React.ReactNode,
147-
options: RenderOptions<Q, Container, BaseElement>,
156+
options: RenderOptions<Q, Container, BaseElement, LegacyRoot, Hydrate>,
148157
): RenderResult<Q, Container, BaseElement>
149158
export function render(
150159
ui: React.ReactNode,

types/test.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as React from 'react'
2+
import * as ReactDOMClient from 'react-dom/client'
23
import {render, fireEvent, screen, waitFor, renderHook} from '.'
34
import * as pure from './pure'
45

@@ -254,6 +255,43 @@ export function testContainer() {
254255
renderHook(() => null, {container: document, hydrate: true})
255256
}
256257

258+
export function testRootContainerWithOptions() {
259+
// @ts-expect-error - legacyRoot does not allow additional options
260+
render('a', {container: document.createElement('div'), legacyRoot: true, renderOptions: {}})
261+
262+
render('a', {
263+
container: document.createElement('div'),
264+
legacyRoot: false,
265+
renderOptions: {
266+
identifierPrefix: 'test',
267+
onRecoverableError: (_error , _errorInfo) => {/* noop */}
268+
}
269+
})
270+
render('a', {
271+
container: document.createElement('div'),
272+
renderOptions: {
273+
identifierPrefix: 'test'
274+
}
275+
})
276+
277+
render('a', {
278+
container: document.createElement('div'),
279+
hydrate: true,
280+
renderOptions: {
281+
identifierPrefix: 'test',
282+
onRecoverableError: (_error , _errorInfo) => {/* noop */}
283+
}
284+
})
285+
// @ts-expect-error - hydrateRoot only allows HydrationOptions, not RootOptions
286+
render('a', {
287+
container: document.createElement('div'),
288+
hydrate: true,
289+
renderOptions: {
290+
identifierPrefix: 'test'
291+
} as ReactDOMClient.RootOptions
292+
})
293+
}
294+
257295
/*
258296
eslint
259297
testing-library/prefer-explicit-assert: "off",

0 commit comments

Comments
 (0)