@@ -179,19 +179,58 @@ export interface RenderHookResult<Result, Props> {
179
179
unmount : ( ) => void
180
180
}
181
181
182
- export interface RenderHookOptions <
182
+ export interface BaseRenderHookOptions <
183
183
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 > {
188
188
/**
189
189
* The argument passed to the renderHook callback. Can be useful if you plan
190
190
* to use the rerender utility to change the values passed to your hook.
191
191
*/
192
192
initialProps ?: Props
193
193
}
194
194
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
+
195
234
/**
196
235
* Allows you to render a hook within a test React component without having to
197
236
* create that component yourself.
@@ -200,11 +239,21 @@ export function renderHook<
200
239
Result ,
201
240
Props ,
202
241
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 ,
204
253
BaseElement extends Element | DocumentFragment = Container ,
205
254
> (
206
255
render : ( initialProps : Props ) => Result ,
207
- options ?: RenderHookOptions < Props , Q , Container , BaseElement > ,
256
+ options ?: HydrateHookOptions < Props , Q , Container , BaseElement > ,
208
257
) : RenderHookResult < Result , Props >
209
258
210
259
/**
0 commit comments