@@ -14,42 +14,39 @@ import {
14
14
describe ( 'ObservableMap' , ( ) => {
15
15
test ( 'should observe individual values' , ( ) => {
16
16
const map = observableMap ( ) ;
17
- let notifsFromA = 0 ;
18
- let notifsFromB = 0 ;
19
17
20
- const unsubA = map . subscribe ( 'a' , ( ) => {
21
- notifsFromA ++ ;
22
- } ) ;
23
- const unsubB = map . subscribe ( 'b' , ( ) => {
24
- notifsFromB ++ ;
25
- } ) ;
18
+ const listenerA = jest . fn ( ) ;
19
+ const listenerB = jest . fn ( ) ;
20
+
21
+ const unsubA = map . subscribe ( 'a' , listenerA ) ;
22
+ const unsubB = map . subscribe ( 'b' , listenerB ) ;
26
23
27
24
// check that setting `a` doesn't notify the `b` listener
28
25
map . set ( 'a' , 1 ) ;
29
- expect ( notifsFromA ) . toBe ( 1 ) ;
30
- expect ( notifsFromB ) . toBe ( 0 ) ;
26
+ expect ( listenerA ) . toHaveBeenCalledTimes ( 1 ) ;
27
+ expect ( listenerB ) . toHaveBeenCalledTimes ( 0 ) ;
31
28
32
29
// check that setting `b` doesn't notify the `a` listener
33
30
map . set ( 'b' , 2 ) ;
34
- expect ( notifsFromA ) . toBe ( 1 ) ;
35
- expect ( notifsFromB ) . toBe ( 1 ) ;
31
+ expect ( listenerA ) . toHaveBeenCalledTimes ( 1 ) ;
32
+ expect ( listenerB ) . toHaveBeenCalledTimes ( 1 ) ;
36
33
37
34
// check that `delete` triggers notifications, too
38
35
map . delete ( 'a' ) ;
39
- expect ( notifsFromA ) . toBe ( 2 ) ;
40
- expect ( notifsFromB ) . toBe ( 1 ) ;
36
+ expect ( listenerA ) . toHaveBeenCalledTimes ( 2 ) ;
37
+ expect ( listenerB ) . toHaveBeenCalledTimes ( 1 ) ;
41
38
42
39
// check that the subscription survived the `delete`
43
40
map . set ( 'a' , 2 ) ;
44
- expect ( notifsFromA ) . toBe ( 3 ) ;
45
- expect ( notifsFromB ) . toBe ( 1 ) ;
41
+ expect ( listenerA ) . toHaveBeenCalledTimes ( 3 ) ;
42
+ expect ( listenerB ) . toHaveBeenCalledTimes ( 1 ) ;
46
43
47
- // check that unsubscription really works.
44
+ // check that unsubscription really works
48
45
unsubA ( ) ;
49
46
unsubB ( ) ;
50
47
map . set ( 'a' , 3 ) ;
51
- expect ( notifsFromA ) . toBe ( 3 ) ;
52
- expect ( notifsFromB ) . toBe ( 1 ) ;
48
+ expect ( listenerA ) . toHaveBeenCalledTimes ( 3 ) ;
49
+ expect ( listenerB ) . toHaveBeenCalledTimes ( 1 ) ;
53
50
} ) ;
54
51
} ) ;
55
52
@@ -58,30 +55,29 @@ describe( 'useObservableValue', () => {
58
55
const map = observableMap ( ) ;
59
56
map . set ( 'a' , 1 ) ;
60
57
61
- let renders = 0 ;
62
- function MapUI ( ) {
58
+ const MapUI = jest . fn ( ( ) => {
63
59
const value = useObservableValue ( map , 'a' ) ;
64
- renders ++ ;
65
60
return < div > value is { value } </ div > ;
66
- }
61
+ } ) ;
67
62
68
63
render ( < MapUI /> ) ;
69
64
expect ( screen . getByText ( / ^ v a l u e i s / ) ) . toHaveTextContent (
70
65
'value is 1'
71
66
) ;
72
- expect ( renders ) . toBe ( 1 ) ;
67
+ expect ( MapUI ) . toHaveBeenCalledTimes ( 1 ) ;
73
68
74
69
act ( ( ) => {
75
70
map . set ( 'a' , 2 ) ;
76
71
} ) ;
77
72
expect ( screen . getByText ( / ^ v a l u e i s / ) ) . toHaveTextContent (
78
73
'value is 2'
79
74
) ;
80
- expect ( renders ) . toBe ( 2 ) ;
75
+ expect ( MapUI ) . toHaveBeenCalledTimes ( 2 ) ;
81
76
77
+ // check that setting unobserved map key doesn't trigger a render at all
82
78
act ( ( ) => {
83
79
map . set ( 'b' , 1 ) ;
84
80
} ) ;
85
- expect ( renders ) . toBe ( 2 ) ;
81
+ expect ( MapUI ) . toHaveBeenCalledTimes ( 2 ) ;
86
82
} ) ;
87
83
} ) ;
0 commit comments