22import 'intersection-observer' ;
33import React , { Component } from 'react' ;
44import renderer from 'react-test-renderer' ;
5- import GuardedIntersectionObserver , {
6- IntersectionObserver ,
7- getOptions ,
8- } from '../IntersectionObserver' ;
5+ import IntersectionObserver , { getOptions } from '../IntersectionObserver' ;
96import { callback , observerElementsMap } from '../observer' ;
10- import Config from '../config' ;
117
128jest . mock ( 'react-dom' , ( ) => {
139 const { findDOMNode } = jest . requireActual ( 'react-dom' ) ;
@@ -22,8 +18,6 @@ jest.mock('react-dom', () => {
2218 } ,
2319 } ;
2420} ) ;
25- // the default "undefined" can't be re-assigned, so we preemptively set it as an empty function
26- Config . errorReporter = function ( ) { } ;
2721
2822const target = { nodeType : 1 , type : 'span' } ;
2923const targets = { div : { nodeType : 1 , type : 'div' } , span : target } ;
@@ -76,127 +70,6 @@ test('throws trying to observe children without a DOM node', () => {
7670 expect ( observerElementsMap . size ) . toBe ( sizeBeforeObserving ) ;
7771} ) ;
7872
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-
20073test ( 'should not observe children that equal null or undefined' , ( ) => {
20174 const sizeBeforeObserving = observerElementsMap . size ;
20275 renderer . create (
0 commit comments