Skip to content

Commit 89baba7

Browse files
committed
test: rework snapshot tests
1 parent eb47ada commit 89baba7

File tree

16 files changed

+788
-625
lines changed

16 files changed

+788
-625
lines changed

jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const {
66
} = require('kcd-scripts/jest')
77

88
module.exports = {
9+
resetMocks: true,
910
collectCoverageFrom,
1011
coveragePathIgnorePatterns: [
1112
...coveragePathIgnorePatterns,

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"jest-watch-select-projects": "^2.0.0",
5252
"jsdom": "^16.2.2",
5353
"kcd-scripts": "^6.2.0",
54+
"redent": "^3.0.0",
5455
"typescript": "^3.9.5"
5556
},
5657
"eslintConfig": {

src/user-event/__mocks__/utils.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const {getElementDisplayName} = require('../__tests__/helpers/utils')
2+
const actual = jest.requireActual('../utils')
3+
4+
function getTrackedElementValues(element) {
5+
return {
6+
value: element.value,
7+
checked: element.checked,
8+
selectionStart: element.selectionStart,
9+
selectionEnd: element.selectionEnd,
10+
selectedOptions: element.selectedOptions
11+
? Array.from(element.selectedOptions).map(o => o.value)
12+
: null,
13+
}
14+
}
15+
16+
function wrapWithTestData(fn) {
17+
return async (element, init) => {
18+
const before = getTrackedElementValues(element)
19+
const testData = {
20+
before,
21+
elementDisplayName: getElementDisplayName(element),
22+
}
23+
24+
// put it on the element so the event handler can grab it
25+
element.testData = testData
26+
const result = await fn(element, init)
27+
28+
const after = getTrackedElementValues(element)
29+
Object.assign(testData, {after})
30+
31+
// elete the testData for the next event
32+
delete element.testData
33+
return result
34+
}
35+
}
36+
37+
const mockFireEvent = wrapWithTestData(actual.fireEvent)
38+
for (const key of Object.keys(actual.fireEvent)) {
39+
if (typeof actual.fireEvent[key] === 'function') {
40+
mockFireEvent[key] = wrapWithTestData(actual.fireEvent[key], key)
41+
} else {
42+
mockFireEvent[key] = actual.fireEvent[key]
43+
}
44+
}
45+
46+
module.exports = {
47+
...actual,
48+
fireEvent: mockFireEvent,
49+
}

src/user-event/__tests__/clear.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ test('clears text', async () => {
88
expect(getEventCalls()).toMatchInlineSnapshot(`
99
Events fired on: input[value=""]
1010
11-
focus
12-
select
13-
select
14-
keydown: Delete (46)
15-
input: "{SELECTION}hello{/SELECTION}" -> ""
16-
select
17-
keyup: Delete (46)
11+
input[value="hello"] - focus
12+
input[value="hello"] - select
13+
input[value="hello"] - select
14+
input[value="hello"] - keydown: Delete (46)
15+
input[value="hello"] - input
16+
"{SELECTION}hello{/SELECTION}" -> "{CURSOR}"
17+
input[value=""] - select
18+
input[value=""] - keyup: Delete (46)
1819
`)
1920
})
2021

@@ -40,11 +41,11 @@ test('does not clear text on readonly inputs', async () => {
4041
expect(getEventCalls()).toMatchInlineSnapshot(`
4142
Events fired on: input[value="hello"]
4243
43-
focus
44-
select
45-
select
46-
keydown: Delete (46)
47-
keyup: Delete (46)
44+
input[value="hello"] - focus
45+
input[value="hello"] - select
46+
input[value="hello"] - select
47+
input[value="hello"] - keydown: Delete (46)
48+
input[value="hello"] - keyup: Delete (46)
4849
`)
4950
})
5051

src/user-event/__tests__/click.js

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ test('click in input', async () => {
77
expect(getEventCalls()).toMatchInlineSnapshot(`
88
Events fired on: input[value=""]
99
10-
mouseover: Left (0)
11-
mousemove: Left (0)
12-
mousedown: Left (0)
13-
focus
14-
focusin
15-
mouseup: Left (0)
16-
click: Left (0)
10+
input[value=""] - mouseover: Left (0)
11+
input[value=""] - mousemove: Left (0)
12+
input[value=""] - mousedown: Left (0)
13+
input[value=""] - focus
14+
input[value=""] - focusin
15+
input[value=""] - mouseup: Left (0)
16+
input[value=""] - click: Left (0)
1717
`)
1818
})
1919

@@ -23,13 +23,13 @@ test('click in textarea', async () => {
2323
expect(getEventCalls()).toMatchInlineSnapshot(`
2424
Events fired on: textarea[value=""]
2525
26-
mouseover: Left (0)
27-
mousemove: Left (0)
28-
mousedown: Left (0)
29-
focus
30-
focusin
31-
mouseup: Left (0)
32-
click: Left (0)
26+
textarea[value=""] - mouseover: Left (0)
27+
textarea[value=""] - mousemove: Left (0)
28+
textarea[value=""] - mousedown: Left (0)
29+
textarea[value=""] - focus
30+
textarea[value=""] - focusin
31+
textarea[value=""] - mouseup: Left (0)
32+
textarea[value=""] - click: Left (0)
3333
`)
3434
})
3535

@@ -40,14 +40,17 @@ test('should fire the correct events for <input type="checkbox">', async () => {
4040
expect(getEventCalls()).toMatchInlineSnapshot(`
4141
Events fired on: input[checked=true]
4242
43-
mouseover: Left (0)
44-
mousemove: Left (0)
45-
mousedown: Left (0)
46-
focus
47-
mouseup: Left (0)
48-
click: unchecked -> checked
49-
input: checked
50-
change
43+
input[checked=false] - mouseover: Left (0)
44+
input[checked=false] - mousemove: Left (0)
45+
input[checked=false] - mousedown: Left (0)
46+
input[checked=false] - focus
47+
input[checked=false] - mouseup: Left (0)
48+
input[checked=false] - click: Left (0)
49+
unchecked -> checked
50+
input[checked=false] - input
51+
unchecked -> checked
52+
input[checked=false] - change
53+
unchecked -> checked
5154
`)
5255
})
5356

@@ -70,14 +73,17 @@ test('should fire the correct events for <input type="radio">', async () => {
7073
expect(getEventCalls()).toMatchInlineSnapshot(`
7174
Events fired on: input[checked=true]
7275
73-
mouseover: Left (0)
74-
mousemove: Left (0)
75-
mousedown: Left (0)
76-
focus
77-
mouseup: Left (0)
78-
click: unchecked -> checked
79-
input: checked
80-
change
76+
input[checked=false] - mouseover: Left (0)
77+
input[checked=false] - mousemove: Left (0)
78+
input[checked=false] - mousedown: Left (0)
79+
input[checked=false] - focus
80+
input[checked=false] - mouseup: Left (0)
81+
input[checked=false] - click: Left (0)
82+
unchecked -> checked
83+
input[checked=false] - input
84+
unchecked -> checked
85+
input[checked=false] - change
86+
unchecked -> checked
8187
`)
8288

8389
expect(element).toHaveProperty('checked', true)
@@ -102,12 +108,12 @@ test('should fire the correct events for <div>', async () => {
102108
expect(getEventCalls()).toMatchInlineSnapshot(`
103109
Events fired on: div
104110
105-
mouseover: Left (0)
106-
mousemove: Left (0)
107-
mousedown: Left (0)
108-
focusin
109-
mouseup: Left (0)
110-
click: Left (0)
111+
div - mouseover: Left (0)
112+
div - mousemove: Left (0)
113+
div - mousedown: Left (0)
114+
div - focusin
115+
div - mouseup: Left (0)
116+
div - click: Left (0)
111117
`)
112118
})
113119

@@ -143,8 +149,15 @@ test('should blur the previous element', async () => {
143149
expect(getEventCalls()).toMatchInlineSnapshot(`
144150
Events fired on: input[name="a"][value=""]
145151
146-
blur
147-
focusout (bubbled from input[name="a"][value=""])
152+
input[name="a"][value=""] - mouseover: Left (0)
153+
input[name="a"][value=""] - mousemove: Left (0)
154+
input[name="a"][value=""] - mousedown: Left (0)
155+
input[name="a"][value=""] - focus
156+
input[name="a"][value=""] - focusin
157+
input[name="a"][value=""] - mouseup: Left (0)
158+
input[name="a"][value=""] - click: Left (0)
159+
input[name="a"][value=""] - blur
160+
input[name="a"][value=""] - focusout
148161
`)
149162
})
150163

@@ -161,9 +174,17 @@ test('should not blur the previous element when mousedown prevents default', asy
161174
await userEvent.click(a)
162175
clearEventCalls()
163176
await userEvent.click(b)
164-
expect(getEventCalls()).toMatchInlineSnapshot(
165-
`No events were fired on: input[name="a"][value=""]`,
166-
)
177+
expect(getEventCalls()).toMatchInlineSnapshot(`
178+
Events fired on: input[name="a"][value=""]
179+
180+
input[name="a"][value=""] - mouseover: Left (0)
181+
input[name="a"][value=""] - mousemove: Left (0)
182+
input[name="a"][value=""] - mousedown: Left (0)
183+
input[name="a"][value=""] - focus
184+
input[name="a"][value=""] - focusin
185+
input[name="a"][value=""] - mouseup: Left (0)
186+
input[name="a"][value=""] - click: Left (0)
187+
`)
167188
})
168189

169190
test('does not lose focus when click updates focus', async () => {

0 commit comments

Comments
 (0)