2
2
import 'intersection-observer' ;
3
3
import React , { Component } from 'react' ;
4
4
import renderer from 'react-test-renderer' ;
5
- import GuardedIntersectionObserver , {
6
- IntersectionObserver ,
7
- getOptions ,
8
- } from '../IntersectionObserver' ;
5
+ import IntersectionObserver , { getOptions } from '../IntersectionObserver' ;
9
6
import { callback , observerElementsMap } from '../observer' ;
10
- import Config from '../config' ;
11
7
12
8
jest . mock ( 'react-dom' , ( ) => {
13
9
const { findDOMNode } = jest . requireActual ( 'react-dom' ) ;
@@ -22,8 +18,6 @@ jest.mock('react-dom', () => {
22
18
} ,
23
19
} ;
24
20
} ) ;
25
- // the default "undefined" can't be re-assigned, so we preemptively set it as an empty function
26
- Config . errorReporter = function ( ) { } ;
27
21
28
22
const target = { nodeType : 1 , type : 'span' } ;
29
23
const targets = { div : { nodeType : 1 , type : 'div' } , span : target } ;
@@ -76,127 +70,6 @@ test('throws trying to observe children without a DOM node', () => {
76
70
expect ( observerElementsMap . size ) . toBe ( sizeBeforeObserving ) ;
77
71
} ) ;
78
72
79
- test ( 'reports error trying to observe children without a DOM node' , ( ) => {
80
- global . spyOn ( console , 'error' ) ; // suppress error boundary warning
81
- const sizeBeforeObserving = observerElementsMap . size ;
82
- const originalErrorReporter = Config . errorReporter ;
83
- const spy = jest . fn ( ) ;
84
- Config . errorReporter = spy ;
85
-
86
- const tree = renderer
87
- . create (
88
- < GuardedIntersectionObserver onChange = { noop } >
89
- < ProxyComponent > { null } </ ProxyComponent >
90
- </ GuardedIntersectionObserver >
91
- )
92
- . toTree ( ) ;
93
-
94
- expect ( observerElementsMap . size ) . toBe ( sizeBeforeObserving ) ;
95
- expect ( spy ) . toBeCalledTimes ( 1 ) ;
96
- expect ( spy ) . toBeCalledWith (
97
- expect . any ( Error ) ,
98
- expect . objectContaining ( { componentStack : expect . any ( String ) } )
99
- ) ;
100
- // Tree stayed mounted because of the error boundary
101
- expect ( tree . props . children . type ) . toEqual ( ProxyComponent ) ;
102
-
103
- Config . errorReporter = originalErrorReporter ;
104
- } ) ;
105
-
106
- test ( 'reports errors by re-throwing trying observer children without a DOM node' , ( ) => {
107
- global . spyOn ( console , 'error' ) ; // suppress error boundary warning
108
- const originalErrorReporter = Config . errorReporter ;
109
- let called = false ;
110
- Config . errorReporter = ( err ) => {
111
- called = true ;
112
- throw err ;
113
- } ;
114
- class TestErrorBoundary extends React . Component {
115
- state = { hasError : false } ;
116
-
117
- componentDidCatch ( ) {
118
- this . setState ( { hasError : true } ) ;
119
- }
120
-
121
- render ( ) {
122
- // eslint-disable-next-line react/prop-types
123
- return this . state . hasError ? 'has-error' : this . props . children ;
124
- }
125
- }
126
-
127
- const children = renderer
128
- . create (
129
- < TestErrorBoundary >
130
- < GuardedIntersectionObserver onChange = { noop } >
131
- < ProxyComponent > { null } </ ProxyComponent >
132
- </ GuardedIntersectionObserver >
133
- </ TestErrorBoundary >
134
- )
135
- . toJSON ( ) ;
136
-
137
- // Tree changed because of the custom error boundary
138
- expect ( children ) . toBe ( 'has-error' ) ;
139
- expect ( called ) . toBe ( true ) ;
140
-
141
- Config . errorReporter = originalErrorReporter ;
142
- } ) ;
143
-
144
- test ( 'render a fallback when some unexpected error happens' , ( ) => {
145
- global . spyOn ( console , 'error' ) ; // suppress error boundary warning
146
- const originalErrorReporter = Config . errorReporter ;
147
- const spy = jest . fn ( ) ;
148
- Config . errorReporter = spy ;
149
- class TestErrorBoundary extends React . Component {
150
- state = { hasError : false } ;
151
-
152
- componentDidCatch ( ) {
153
- this . setState ( { hasError : true } ) ;
154
- }
155
-
156
- render ( ) {
157
- // eslint-disable-next-line react/prop-types
158
- return this . state . hasError ? 'has-error' : this . props . children ;
159
- }
160
- }
161
-
162
- const Boom = ( ) => {
163
- throw new Error ( 'unexpected rendering error' ) ;
164
- } ;
165
-
166
- const children = renderer
167
- . create (
168
- < TestErrorBoundary >
169
- < GuardedIntersectionObserver onChange = { noop } >
170
- < Boom />
171
- </ GuardedIntersectionObserver >
172
- </ TestErrorBoundary >
173
- )
174
- . toJSON ( ) ;
175
-
176
- // Tree changed because of the custom error boundary
177
- expect ( children ) . toBe ( 'has-error' ) ;
178
- expect ( spy ) . not . toBeCalled ( ) ;
179
-
180
- Config . errorReporter = originalErrorReporter ;
181
- } ) ;
182
-
183
- test ( 'error boundary forwards ref' , ( ) => {
184
- let observer ;
185
- renderer . create (
186
- < GuardedIntersectionObserver
187
- onChange = { noop }
188
- ref = { ( instance ) => {
189
- observer = instance ;
190
- } }
191
- >
192
- < div />
193
- </ GuardedIntersectionObserver > ,
194
- { createNodeMock }
195
- ) ;
196
-
197
- expect ( observer instanceof IntersectionObserver ) . toBe ( true ) ;
198
- } ) ;
199
-
200
73
test ( 'should not observe children that equal null or undefined' , ( ) => {
201
74
const sizeBeforeObserving = observerElementsMap . size ;
202
75
renderer . create (
0 commit comments