1
1
import * as React from 'react'
2
2
import * as THREE from 'three'
3
3
import * as Stdlib from 'three-stdlib'
4
- import { createCanvas } from '@react-three/test-renderer/src/createTestCanvas'
5
- import { createWebGLContext } from '@react-three/test-renderer/src/createWebGLContext'
4
+ import { createRoot , advance , useLoader , act , useThree , useGraph , useFrame , ObjectMap } from '../src'
6
5
7
- import { asyncUtils } from '../../../shared/asyncUtils'
8
-
9
- import { createRoot , advance , useLoader , act , useThree , useGraph , useFrame , ObjectMap } from '../../src'
10
-
11
- const resolvers : ( ( ) => void ) [ ] = [ ]
12
-
13
- const { waitFor } = asyncUtils ( act , ( resolver : ( ) => void ) => {
14
- resolvers . push ( resolver )
15
- } )
6
+ const root = createRoot ( document . createElement ( 'canvas' ) )
16
7
17
8
describe ( 'hooks' , ( ) => {
18
- let canvas : HTMLCanvasElement = null !
19
-
20
- beforeEach ( ( ) => {
21
- canvas = createCanvas ( {
22
- beforeReturn : ( canvas ) => {
23
- function getContext (
24
- contextId : '2d' ,
25
- options ?: CanvasRenderingContext2DSettings ,
26
- ) : CanvasRenderingContext2D | null
27
- function getContext (
28
- contextId : 'bitmaprenderer' ,
29
- options ?: ImageBitmapRenderingContextSettings ,
30
- ) : ImageBitmapRenderingContext | null
31
- function getContext ( contextId : 'webgl' , options ?: WebGLContextAttributes ) : WebGLRenderingContext | null
32
- function getContext ( contextId : 'webgl2' , options ?: WebGLContextAttributes ) : WebGL2RenderingContext | null
33
- function getContext ( contextId : string ) : RenderingContext | null {
34
- if ( contextId === 'webgl' || contextId === 'webgl2' ) {
35
- return createWebGLContext ( canvas )
36
- }
37
- return null
38
- }
39
-
40
- canvas . getContext = getContext
41
- } ,
42
- } )
43
- } )
44
-
45
9
it ( 'can handle useThree hook' , async ( ) => {
46
10
let result = { } as {
47
11
camera : THREE . Camera
@@ -68,9 +32,7 @@ describe('hooks', () => {
68
32
return < group />
69
33
}
70
34
71
- await act ( async ( ) => {
72
- createRoot ( canvas ) . render ( < Component /> )
73
- } )
35
+ await act ( async ( ) => root . render ( < Component /> ) )
74
36
75
37
expect ( result . camera instanceof THREE . Camera ) . toBeTruthy ( )
76
38
expect ( result . scene instanceof THREE . Scene ) . toBeTruthy ( )
@@ -96,14 +58,9 @@ describe('hooks', () => {
96
58
)
97
59
}
98
60
99
- let scene : THREE . Scene = null !
100
- await act (
101
- async ( ) =>
102
- ( scene = createRoot ( canvas )
103
- . configure ( { frameloop : 'never' } )
104
- . render ( < Component /> )
105
- . getState ( ) . scene ) ,
106
- )
61
+ const store = await act ( async ( ) => root . configure ( { frameloop : 'never' } ) . render ( < Component /> ) )
62
+ const { scene } = store . getState ( )
63
+
107
64
advance ( Date . now ( ) )
108
65
expect ( scene . children [ 0 ] . position . x ) . toEqual ( 1 )
109
66
expect ( frameCalls . length ) . toBeGreaterThan ( 0 )
@@ -125,18 +82,8 @@ describe('hooks', () => {
125
82
return < primitive object = { model } />
126
83
}
127
84
128
- let scene : THREE . Scene = null !
129
- await act ( async ( ) => {
130
- scene = createRoot ( canvas )
131
- . render (
132
- < React . Suspense fallback = { null } >
133
- < Component />
134
- </ React . Suspense > ,
135
- )
136
- . getState ( ) . scene
137
- } )
138
-
139
- await waitFor ( ( ) => expect ( scene . children [ 0 ] ) . toBeDefined ( ) )
85
+ const store = await act ( async ( ) => root . render ( < Component /> ) )
86
+ const { scene } = store . getState ( )
140
87
141
88
expect ( scene . children [ 0 ] ) . toBe ( MockMesh )
142
89
} )
@@ -183,18 +130,8 @@ describe('hooks', () => {
183
130
)
184
131
}
185
132
186
- let scene : THREE . Scene = null !
187
- await act ( async ( ) => {
188
- scene = createRoot ( canvas )
189
- . render (
190
- < React . Suspense fallback = { null } >
191
- < Component />
192
- </ React . Suspense > ,
193
- )
194
- . getState ( ) . scene
195
- } )
196
-
197
- await waitFor ( ( ) => expect ( scene . children [ 0 ] ) . toBeDefined ( ) )
133
+ const store = await act ( async ( ) => root . render ( < Component /> ) )
134
+ const { scene } = store . getState ( )
198
135
199
136
expect ( scene . children [ 0 ] ) . toBe ( MockMesh )
200
137
} )
@@ -230,9 +167,7 @@ describe('hooks', () => {
230
167
return < mesh />
231
168
}
232
169
233
- await act ( async ( ) => {
234
- createRoot ( canvas ) . render ( < Component /> )
235
- } )
170
+ await act ( async ( ) => root . render ( < Component /> ) )
236
171
237
172
expect ( result ) . toEqual ( {
238
173
nodes : {
0 commit comments