1
1
import React from 'react' ;
2
- import { render } from '@testing-library/react' ;
2
+ import { act , render } from '@testing-library/react' ;
3
3
import Spinner from '../Spinner' ;
4
4
5
+ jest . useFakeTimers ( ) ;
6
+
5
7
describe ( 'Spinner' , ( ) => {
6
8
test ( 'renders a div with class "border-spinner"' , ( ) => {
7
9
const spinner = render ( < Spinner /> ) ;
@@ -12,17 +14,18 @@ describe('Spinner', () => {
12
14
} ) ;
13
15
14
16
test ( "renders its content if object isn't loading" , ( ) => {
15
- const { container : All , rerender} = render (
17
+ const { container : container , rerender} = render (
16
18
< Spinner > Some spinner content</ Spinner >
17
19
) ;
18
20
19
- expect ( All ) . toHaveTextContent ( 'Some spinner content' ) ;
21
+ expect ( container ) . toHaveTextContent ( 'Some spinner content' ) ;
22
+ expect ( container . querySelector ( 'div.spinner-border' ) ) . toBe ( null ) ;
20
23
21
24
rerender (
22
25
< Spinner loading_state = { { is_loading : true } } > Some spinner content</ Spinner >
23
26
) ;
24
27
25
- const overAll = All . firstChild ;
28
+ const overAll = container . firstChild ;
26
29
const spinner = overAll . lastChild ;
27
30
28
31
expect ( overAll ) . toHaveTextContent ( 'Some spinner content' ) ;
@@ -64,4 +67,31 @@ describe('Spinner', () => {
64
67
expect ( spinnerSuccess ) . toHaveClass ( 'text-success' ) ;
65
68
expect ( spinnerDark ) . toHaveClass ( 'text-dark' ) ;
66
69
} ) ;
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
+ } ) ;
67
97
} ) ;
0 commit comments