11import React , { useEffect , useState } from 'react'
2- import { renderHook } from 'react-hooks-testing-library'
32import { render , act } from 'react-testing-library'
43
54const mockObserve = jest . fn ( )
@@ -23,19 +22,39 @@ beforeEach(() => {
2322 } )
2423} )
2524
25+ it ( 'should not initialize observer if element ref is not provided' , ( ) => {
26+ // eslint-disable-next-line react/prop-types
27+ const ObservedComponent = ( { observer, options } ) => {
28+ useObserver ( observer , options ) ;
29+
30+ return < div />
31+ } ;
32+
33+ render ( < ObservedComponent observer = { MockObserver } /> ) ;
34+
35+ expect ( MockObserver ) . not . toBeCalled ( ) ;
36+ } ) ;
37+
2638it ( 'should create only one observer instance for same Observer and Options for all uses and rerenders' , ( ) => {
2739 const loopArr = [ ...Array ( 10 ) ]
2840
41+ // eslint-disable-next-line react/prop-types
42+ const ObservedComponent = ( { observer, options } ) => {
43+ const [ ref ] = useObserver ( observer , options ) ;
44+
45+ return < div ref = { ref } />
46+ } ;
47+
2948 loopArr . forEach ( ( ) => {
30- renderHook ( ( ) => useObserver ( MockObserver ) )
31- renderHook ( ( ) => useObserver ( MockObserver , { observerOptions : { test : 'test' } } ) )
32- renderHook ( ( ) => useObserver ( MockObserver , { observerOptions : { test : 'test2' } } ) )
33- renderHook ( ( ) => useObserver ( MockObserver , { observerOptions : { test : 'test' } , subscribeOptions : { test : 'test' } } ) )
49+ render ( < ObservedComponent observer = { MockObserver } /> )
50+ render ( < ObservedComponent observer = { MockObserver } options = { { observerOptions : { test : 'test' } } } /> )
51+ render ( < ObservedComponent observer = { MockObserver } options = { { observerOptions : { test : 'test2' } } } /> )
52+ render ( < ObservedComponent observer = { MockObserver } options = { { observerOptions : { test : 'test' } , subscribeOptions : { test : 'test' } } } /> )
3453 } )
3554
36- const { rerender } = renderHook ( ( ) => useObserver ( MockObserver ) )
37- const { rerender : rerender2 } = renderHook ( ( ) => useObserver ( MockObserver , { observerOptions : { test : 'test' } } ) )
38- const { rerender : rerender3 } = renderHook ( ( ) => useObserver ( MockObserver , { observerOptions : { test : 'test2' } } ) )
55+ const { rerender } = render ( < ObservedComponent observer = { MockObserver } /> ) ;
56+ const { rerender : rerender2 } = render ( < ObservedComponent observer = { MockObserver } options = { { observerOptions : { test : 'test' } } } /> )
57+ const { rerender : rerender3 } = render ( < ObservedComponent observer = { MockObserver } options = { { observerOptions : { test : 'test2' } } } /> )
3958
4059 loopArr . forEach ( ( ) => {
4160 rerender ( )
0 commit comments