@@ -2,7 +2,7 @@ import ReactDOMServer from 'react-dom/server'
2
2
import ReactDOM from 'react-dom'
3
3
import { act } from 'react-dom/test-utils'
4
4
5
- import { RendererProps , RendererOptions } from '../types/react'
5
+ import { RendererOptions , RendererProps } from '../types/react'
6
6
7
7
import { createRenderHook } from '../core'
8
8
import { createTestHarness } from '../helpers/createTestHarness'
@@ -12,44 +12,45 @@ function createServerRenderer<TProps, TResult>(
12
12
{ wrapper } : RendererOptions < TProps >
13
13
) {
14
14
let renderProps : TProps | undefined
15
- let hydrated = false
16
- const container = document . createElement ( 'div' )
15
+ let container : HTMLDivElement | undefined ;
16
+ let serverOutput = ''
17
17
const testHarness = createTestHarness ( rendererProps , wrapper , false )
18
18
19
19
return {
20
20
render ( props ?: TProps ) {
21
21
renderProps = props
22
22
act ( ( ) => {
23
23
try {
24
- const serverOutput = ReactDOMServer . renderToString ( testHarness ( props ) )
25
- container . innerHTML = serverOutput
24
+ serverOutput = ReactDOMServer . renderToString ( testHarness ( props ) )
26
25
} catch ( e : unknown ) {
27
26
rendererProps . setError ( e as Error )
28
27
}
29
28
} )
30
29
} ,
31
30
hydrate ( ) {
32
- if ( hydrated ) {
31
+ if ( container ) {
33
32
throw new Error ( 'The component can only be hydrated once' )
34
33
} else {
34
+ container = document . createElement ( 'div' )
35
35
act ( ( ) => {
36
- ReactDOM . hydrate ( testHarness ( renderProps ) , container )
36
+ ReactDOM . hydrate ( testHarness ( renderProps ) , container || null )
37
37
} )
38
- hydrated = true
39
38
}
40
39
} ,
41
40
rerender ( props ?: TProps ) {
42
- if ( ! hydrated ) {
41
+ if ( ! container ) {
43
42
throw new Error ( 'You must hydrate the component before you can rerender' )
44
43
}
45
44
act ( ( ) => {
46
- ReactDOM . render ( testHarness ( props ) , container )
45
+ ReactDOM . render ( testHarness ( props ) , container || null )
47
46
} )
48
47
} ,
49
48
unmount ( ) {
50
- if ( hydrated ) {
49
+ if ( container ) {
51
50
act ( ( ) => {
52
- ReactDOM . unmountComponentAtNode ( container )
51
+ if ( typeof container !== 'undefined' ) {
52
+ ReactDOM . unmountComponentAtNode ( container )
53
+ }
53
54
} )
54
55
}
55
56
} ,
0 commit comments