@@ -3,7 +3,11 @@ import {render, screen} from '@testing-library/react'
3
3
import userEvent from '../../src'
4
4
5
5
test . each ( [ 'input' , 'textarea' ] ) ( 'should clear text in <%s>' , type => {
6
- const onChange = jest . fn ( )
6
+ const onChange = jest . fn ( ) . mockImplementation ( event => {
7
+ // Verify that `event.target`'s value is correct when the event handler is
8
+ // fired.
9
+ expect ( event . target ) . toHaveProperty ( 'value' , '' )
10
+ } )
7
11
render (
8
12
React . createElement ( type , {
9
13
'data-testid' : 'input' ,
@@ -15,13 +19,18 @@ test.each(['input', 'textarea'])('should clear text in <%s>', type => {
15
19
const input = screen . getByTestId ( 'input' )
16
20
userEvent . clear ( input )
17
21
expect ( input . value ) . toBe ( '' )
22
+ expect ( onChange ) . toHaveBeenCalledTimes ( 1 )
18
23
} )
19
24
20
25
test . each ( [ 'input' , 'textarea' ] ) (
21
26
'should not clear when <%s> is disabled' ,
22
27
type => {
23
28
const text = 'Hello, world!'
24
- const onChange = jest . fn ( )
29
+ const onChange = jest . fn ( ) . mockImplementation ( event => {
30
+ // Verify that `event.target`'s value is correct when the event handler is
31
+ // fired.
32
+ expect ( event . target ) . toHaveProperty ( 'value' , '' )
33
+ } )
25
34
render (
26
35
React . createElement ( type , {
27
36
'data-testid' : 'input' ,
@@ -34,6 +43,7 @@ test.each(['input', 'textarea'])(
34
43
const input = screen . getByTestId ( 'input' )
35
44
userEvent . clear ( input )
36
45
expect ( input ) . toHaveProperty ( 'value' , text )
46
+ expect ( onChange ) . toHaveBeenCalledTimes ( 0 )
37
47
} ,
38
48
)
39
49
@@ -60,21 +70,24 @@ test.each(['input', 'textarea'])(
60
70
userEvent . clear ( input )
61
71
expect ( onKeyDown ) . toHaveBeenCalledTimes ( 1 )
62
72
expect ( onKeyUp ) . toHaveBeenCalledTimes ( 1 )
73
+ expect ( onChange ) . toHaveBeenCalledTimes ( 0 )
63
74
expect ( input ) . toHaveProperty ( 'value' , text )
64
75
} ,
65
76
)
66
77
; [ 'email' , 'password' , 'number' , 'text' ] . forEach ( type => {
67
78
test . each ( [ 'input' , 'textarea' ] ) (
68
79
`should clear when <%s> is of type="${ type } "` ,
69
80
inputType => {
81
+ const onChange = jest . fn ( )
82
+
70
83
const value = '12345'
71
84
const placeholder = 'Enter password'
72
85
73
86
const element = React . createElement ( inputType , {
74
87
value,
75
88
placeholder,
76
89
type,
77
- onChange : jest . fn ( ) ,
90
+ onChange,
78
91
} )
79
92
80
93
render ( element )
@@ -83,6 +96,7 @@ test.each(['input', 'textarea'])(
83
96
expect ( input . value ) . toBe ( value )
84
97
userEvent . clear ( input )
85
98
expect ( input . value ) . toBe ( '' )
99
+ expect ( onChange ) . toHaveBeenCalledTimes ( 1 )
86
100
} ,
87
101
)
88
102
} )
0 commit comments