11import React from 'react' ;
2- import { render } from '@testing-library/react' ;
2+ import { act , render } from '@testing-library/react' ;
33import Spinner from '../Spinner' ;
44
5+ jest . useFakeTimers ( ) ;
6+
57describe ( 'Spinner' , ( ) => {
68 test ( 'renders a div with class "border-spinner"' , ( ) => {
79 const spinner = render ( < Spinner /> ) ;
@@ -12,17 +14,18 @@ describe('Spinner', () => {
1214 } ) ;
1315
1416 test ( "renders its content if object isn't loading" , ( ) => {
15- const { container : All , rerender} = render (
17+ const { container : container , rerender} = render (
1618 < Spinner > Some spinner content</ Spinner >
1719 ) ;
1820
19- expect ( All ) . toHaveTextContent ( 'Some spinner content' ) ;
21+ expect ( container ) . toHaveTextContent ( 'Some spinner content' ) ;
22+ expect ( container . querySelector ( 'div.spinner-border' ) ) . toBe ( null ) ;
2023
2124 rerender (
2225 < Spinner loading_state = { { is_loading : true } } > Some spinner content</ Spinner >
2326 ) ;
2427
25- const overAll = All . firstChild ;
28+ const overAll = container . firstChild ;
2629 const spinner = overAll . lastChild ;
2730
2831 expect ( overAll ) . toHaveTextContent ( 'Some spinner content' ) ;
@@ -64,4 +67,31 @@ describe('Spinner', () => {
6467 expect ( spinnerSuccess ) . toHaveClass ( 'text-success' ) ;
6568 expect ( spinnerDark ) . toHaveClass ( 'text-dark' ) ;
6669 } ) ;
70+
71+ test ( 'spinner can be debounced with debounce prop' , ( ) => {
72+ const { container : container , rerender} = render (
73+ < Spinner loading_state = { { is_loading : true } } debounce = { 1000 } >
74+ Some spinner content
75+ </ Spinner >
76+ ) ;
77+
78+ const overAll = container . firstChild ;
79+ const spinner = overAll . lastChild ;
80+
81+ expect ( overAll ) . toHaveTextContent ( 'Some spinner content' ) ;
82+ expect ( spinner . firstChild ) . toHaveClass ( 'spinner-border' ) ;
83+
84+ rerender (
85+ < Spinner loading_state = { { is_loading : false } } debounce = { 1000 } >
86+ Some spinner content
87+ </ Spinner >
88+ ) ;
89+
90+ expect ( overAll ) . toHaveTextContent ( 'Some spinner content' ) ;
91+ expect ( spinner . firstChild ) . toHaveClass ( 'spinner-border' ) ;
92+
93+ act ( ( ) => jest . advanceTimersByTime ( 1000 ) ) ;
94+
95+ expect ( container . querySelector ( 'div.spinner-border' ) ) . toBe ( null ) ;
96+ } ) ;
6797} ) ;
0 commit comments