@@ -179,19 +179,58 @@ export interface RenderHookResult<Result, Props> {
179179 unmount : ( ) => void
180180}
181181
182- export interface RenderHookOptions <
182+ export interface BaseRenderHookOptions <
183183 Props ,
184- Q extends Queries = typeof queries ,
185- Container extends Element | DocumentFragment = HTMLElement ,
186- BaseElement extends Element | DocumentFragment = Container ,
187- > extends RenderOptions < Q , Container , BaseElement > {
184+ Q extends Queries ,
185+ Container extends RendererableContainer | HydrateableContainer ,
186+ BaseElement extends Element | DocumentFragment ,
187+ > extends BaseRenderOptions < Q , Container , BaseElement > {
188188 /**
189189 * The argument passed to the renderHook callback. Can be useful if you plan
190190 * to use the rerender utility to change the values passed to your hook.
191191 */
192192 initialProps ?: Props
193193}
194194
195+ export interface ClientRenderHookOptions <
196+ Props ,
197+ Q extends Queries ,
198+ Container extends Element | DocumentFragment ,
199+ BaseElement extends Element | DocumentFragment = Container ,
200+ > extends BaseRenderHookOptions < Props , Q , Container , BaseElement > {
201+ /**
202+ * If `hydrate` is set to `true`, then it will render with `ReactDOM.hydrate`. This may be useful if you are using server-side
203+ * rendering and use ReactDOM.hydrate to mount your components.
204+ *
205+ * @see https://testing-library.com/docs/react-testing-library/api/#hydrate)
206+ */
207+ hydrate ?: false | undefined
208+ }
209+
210+ export interface HydrateHookOptions <
211+ Props ,
212+ Q extends Queries ,
213+ Container extends Element | DocumentFragment ,
214+ BaseElement extends Element | DocumentFragment = Container ,
215+ > extends BaseRenderHookOptions < Props , Q , Container , BaseElement > {
216+ /**
217+ * If `hydrate` is set to `true`, then it will render with `ReactDOM.hydrate`. This may be useful if you are using server-side
218+ * rendering and use ReactDOM.hydrate to mount your components.
219+ *
220+ * @see https://testing-library.com/docs/react-testing-library/api/#hydrate)
221+ */
222+ hydrate : true
223+ }
224+
225+ export type RenderHookOptions <
226+ Props ,
227+ Q extends Queries = typeof queries ,
228+ Container extends Element | DocumentFragment = HTMLElement ,
229+ BaseElement extends Element | DocumentFragment = Container ,
230+ > =
231+ | ClientRenderHookOptions < Props , Q , Container , BaseElement >
232+ | HydrateHookOptions < Props , Q , Container , BaseElement >
233+
195234/**
196235 * Allows you to render a hook within a test React component without having to
197236 * create that component yourself.
@@ -200,11 +239,21 @@ export function renderHook<
200239 Result ,
201240 Props ,
202241 Q extends Queries = typeof queries ,
203- Container extends Element | DocumentFragment = HTMLElement ,
242+ Container extends RendererableContainer = HTMLElement ,
243+ BaseElement extends Element | DocumentFragment = Container ,
244+ > (
245+ render : ( initialProps : Props ) => Result ,
246+ options ?: ClientRenderHookOptions < Props , Q , Container , BaseElement > ,
247+ ) : RenderHookResult < Result , Props >
248+ export function renderHook <
249+ Result ,
250+ Props ,
251+ Q extends Queries = typeof queries ,
252+ Container extends HydrateableContainer = HTMLElement ,
204253 BaseElement extends Element | DocumentFragment = Container ,
205254> (
206255 render : ( initialProps : Props ) => Result ,
207- options ?: RenderHookOptions < Props , Q , Container , BaseElement > ,
256+ options ?: HydrateHookOptions < Props , Q , Container , BaseElement > ,
208257) : RenderHookResult < Result , Props >
209258
210259/**
0 commit comments