13
13
let React ;
14
14
let ReactTestRenderer ;
15
15
let ReactDebugTools ;
16
- let currentDispatcher ;
17
16
18
17
describe ( 'ReactHooksInspectionIntergration' , ( ) => {
19
18
beforeEach ( ( ) => {
@@ -24,10 +23,6 @@ describe('ReactHooksInspectionIntergration', () => {
24
23
React = require ( 'react' ) ;
25
24
ReactTestRenderer = require ( 'react-test-renderer' ) ;
26
25
ReactDebugTools = require ( 'react-debug-tools' ) ;
27
-
28
- currentDispatcher =
29
- React . __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
30
- . ReactCurrentDispatcher ;
31
26
} ) ;
32
27
33
28
it ( 'should inspect the current state of useState hooks' , ( ) => {
@@ -44,10 +39,7 @@ describe('ReactHooksInspectionIntergration', () => {
44
39
let renderer = ReactTestRenderer . create ( < Foo prop = "prop" /> ) ;
45
40
46
41
let childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
47
- let tree = ReactDebugTools . inspectHooksOfFiber (
48
- currentDispatcher ,
49
- childFiber ,
50
- ) ;
42
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
51
43
expect ( tree ) . toEqual ( [
52
44
{ name : 'State' , value : 'hello' , subHooks : [ ] } ,
53
45
{ name : 'State' , value : 'world' , subHooks : [ ] } ,
@@ -61,7 +53,7 @@ describe('ReactHooksInspectionIntergration', () => {
61
53
setStateA ( 'Hi' ) ;
62
54
63
55
childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
64
- tree = ReactDebugTools . inspectHooksOfFiber ( currentDispatcher , childFiber ) ;
56
+ tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
65
57
66
58
expect ( tree ) . toEqual ( [
67
59
{ name : 'State' , value : 'Hi' , subHooks : [ ] } ,
@@ -71,7 +63,7 @@ describe('ReactHooksInspectionIntergration', () => {
71
63
setStateB ( 'world!' ) ;
72
64
73
65
childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
74
- tree = ReactDebugTools . inspectHooksOfFiber ( currentDispatcher , childFiber ) ;
66
+ tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
75
67
76
68
expect ( tree ) . toEqual ( [
77
69
{ name : 'State' , value : 'Hi' , subHooks : [ ] } ,
@@ -119,10 +111,7 @@ describe('ReactHooksInspectionIntergration', () => {
119
111
120
112
let { onClick : updateStates } = renderer . root . findByType ( 'div' ) . props ;
121
113
122
- let tree = ReactDebugTools . inspectHooksOfFiber (
123
- currentDispatcher ,
124
- childFiber ,
125
- ) ;
114
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
126
115
expect ( tree ) . toEqual ( [
127
116
{ name : 'State' , value : 'a' , subHooks : [ ] } ,
128
117
{ name : 'Reducer' , value : 'b' , subHooks : [ ] } ,
@@ -137,7 +126,7 @@ describe('ReactHooksInspectionIntergration', () => {
137
126
updateStates ( ) ;
138
127
139
128
childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
140
- tree = ReactDebugTools . inspectHooksOfFiber ( currentDispatcher , childFiber ) ;
129
+ tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
141
130
142
131
expect ( tree ) . toEqual ( [
143
132
{ name : 'State' , value : 'A' , subHooks : [ ] } ,
@@ -163,10 +152,7 @@ describe('ReactHooksInspectionIntergration', () => {
163
152
</ MyContext . Provider > ,
164
153
) ;
165
154
let childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
166
- let tree = ReactDebugTools . inspectHooksOfFiber (
167
- currentDispatcher ,
168
- childFiber ,
169
- ) ;
155
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
170
156
expect ( tree ) . toEqual ( [
171
157
{
172
158
name : 'Context' ,
@@ -186,10 +172,7 @@ describe('ReactHooksInspectionIntergration', () => {
186
172
let renderer = ReactTestRenderer . create ( < Foo ref = { ref } /> ) ;
187
173
188
174
let childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
189
- let tree = ReactDebugTools . inspectHooksOfFiber (
190
- currentDispatcher ,
191
- childFiber ,
192
- ) ;
175
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
193
176
expect ( tree ) . toEqual ( [
194
177
{ name : 'ImperativeHandle' , value : obj , subHooks : [ ] } ,
195
178
] ) ;
@@ -204,10 +187,7 @@ describe('ReactHooksInspectionIntergration', () => {
204
187
let renderer = ReactTestRenderer . create ( < Foo /> ) ;
205
188
// TODO: Test renderer findByType is broken for memo. Have to search for the inner.
206
189
let childFiber = renderer . root . findByType ( InnerFoo ) . _currentFiber ( ) ;
207
- let tree = ReactDebugTools . inspectHooksOfFiber (
208
- currentDispatcher ,
209
- childFiber ,
210
- ) ;
190
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
211
191
expect ( tree ) . toEqual ( [ { name : 'State' , value : 'hello' , subHooks : [ ] } ] ) ;
212
192
} ) ;
213
193
@@ -222,10 +202,7 @@ describe('ReactHooksInspectionIntergration', () => {
222
202
}
223
203
let renderer = ReactTestRenderer . create ( < Foo /> ) ;
224
204
let childFiber = renderer . root . findByType ( Foo ) . _currentFiber ( ) ;
225
- let tree = ReactDebugTools . inspectHooksOfFiber (
226
- currentDispatcher ,
227
- childFiber ,
228
- ) ;
205
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
229
206
expect ( tree ) . toEqual ( [
230
207
{
231
208
name : 'Custom' ,
@@ -261,10 +238,42 @@ describe('ReactHooksInspectionIntergration', () => {
261
238
await LazyFoo ;
262
239
263
240
let childFiber = renderer . root . _currentFiber ( ) ;
264
- let tree = ReactDebugTools . inspectHooksOfFiber (
265
- currentDispatcher ,
266
- childFiber ,
267
- ) ;
241
+ let tree = ReactDebugTools . inspectHooksOfFiber ( childFiber ) ;
268
242
expect ( tree ) . toEqual ( [ { name : 'State' , value : 'def' , subHooks : [ ] } ] ) ;
269
243
} ) ;
244
+
245
+ it ( 'should support an injected dispatcher' , ( ) => {
246
+ function Foo ( props ) {
247
+ let [ state ] = React . useState ( 'hello world' ) ;
248
+ return < div > { state } </ div > ;
249
+ }
250
+
251
+ let initial = { } ;
252
+ let current = initial ;
253
+ let getterCalls = 0 ;
254
+ let setterCalls = [ ] ;
255
+ let FakeDispatcherRef = {
256
+ get current ( ) {
257
+ getterCalls ++ ;
258
+ return current ;
259
+ } ,
260
+ set current ( value ) {
261
+ setterCalls . push ( value ) ;
262
+ current = value ;
263
+ } ,
264
+ } ;
265
+
266
+ let renderer = ReactTestRenderer . create ( < Foo /> ) ;
267
+ let childFiber = renderer . root . _currentFiber ( ) ;
268
+ expect ( ( ) => {
269
+ ReactDebugTools . inspectHooksOfFiber ( childFiber , FakeDispatcherRef ) ;
270
+ } ) . toThrow (
271
+ 'Hooks can only be called inside the body of a function component.' ,
272
+ ) ;
273
+
274
+ expect ( getterCalls ) . toBe ( 1 ) ;
275
+ expect ( setterCalls ) . toHaveLength ( 2 ) ;
276
+ expect ( setterCalls [ 0 ] ) . not . toBe ( initial ) ;
277
+ expect ( setterCalls [ 1 ] ) . toBe ( initial ) ;
278
+ } ) ;
270
279
} ) ;
0 commit comments