@@ -7,33 +7,31 @@ import {
7
7
type Step ,
8
8
type StringifyExtension ,
9
9
type UserFlow ,
10
- } from " @puppeteer/replay"
10
+ } from ' @puppeteer/replay'
11
11
12
12
export class Extension implements StringifyExtension {
13
13
async beforeAllSteps ( out : LineWriter , flow : UserFlow ) {
14
14
// Jest docblock
15
- out . appendLine ( " /**" )
16
- const step = flow . steps . find ( ( step ) => step . type === " navigate" ) as
15
+ out . appendLine ( ' /**' )
16
+ const step = flow . steps . find ( step => step . type === ' navigate' ) as
17
17
| NavigateStep
18
18
| undefined
19
19
if ( step ) {
20
- out . appendLine ( " * @jest-environment url" )
20
+ out . appendLine ( ' * @jest-environment url' )
21
21
out . appendLine ( ` * @jest-environment-options { "url": "${ step . url } " }` )
22
22
} else {
23
- out . appendLine ( " * @jest-environment jsdom" )
23
+ out . appendLine ( ' * @jest-environment jsdom' )
24
24
}
25
- out . appendLine ( " */" )
25
+ out . appendLine ( ' */' )
26
26
27
27
// Imports
28
+ out . appendLine ( "const {screen, waitFor} = require('@testing-library/dom')" )
28
29
out . appendLine (
29
- ' const { screen, waitFor } = require(" @testing-library/dom")' ,
30
+ " const {default: userEvent } = require(' @testing-library/user-event')" ,
30
31
)
31
- out . appendLine (
32
- 'const { default: userEvent } = require("@testing-library/user-event")' ,
33
- )
34
- out . appendLine ( 'require("@testing-library/jest-dom")' )
32
+ out . appendLine ( "require('@testing-library/jest-dom')" )
35
33
36
- out . appendLine ( "" )
34
+ out . appendLine ( '' )
37
35
38
36
// Test
39
37
out . appendLine ( `test(${ formatAsJSLiteral ( flow . title ) } , async () => {` )
@@ -43,55 +41,55 @@ export class Extension implements StringifyExtension {
43
41
async afterAllSteps ( out : LineWriter ) {
44
42
// Test
45
43
out . endBlock ( )
46
- out . appendLine ( "})" )
44
+ out . appendLine ( '})' )
47
45
}
48
46
49
47
async stringifyStep ( out : LineWriter , step : Step , flow ?: UserFlow ) {
50
48
switch ( step . type ) {
51
- case " change" :
49
+ case ' change' :
52
50
out . appendLine (
53
51
`await userEvent.type(${ stringifySelector (
54
52
step . selectors [ 0 ] ,
55
53
) } , ${ formatAsJSLiteral ( step . value ) } )`,
56
54
)
57
55
break
58
- case " click" :
56
+ case ' click' :
59
57
out . appendLine (
60
58
`await userEvent.click(${ stringifySelector ( step . selectors [ 0 ] ) } ${
61
- step . button === " secondary" ? " , { buttons: 2 }" : ""
59
+ step . button === ' secondary' ? ' , {buttons: 2}' : ''
62
60
} )`,
63
61
)
64
62
break
65
- case " hover" :
63
+ case ' hover' :
66
64
out . appendLine (
67
65
`await userEvent.hover(${ stringifySelector ( step . selectors [ 0 ] ) } )` ,
68
66
)
69
67
break
70
- case " doubleClick" :
68
+ case ' doubleClick' :
71
69
out . appendLine (
72
70
`await userEvent.dblClick(${ stringifySelector ( step . selectors [ 0 ] ) } ${
73
- step . button === " secondary" ? " , { buttons: 2 }" : ""
71
+ step . button === ' secondary' ? ' , {buttons: 2}' : ''
74
72
} )`,
75
73
)
76
74
break
77
- case " keyDown" :
75
+ case ' keyDown' :
78
76
out . appendLine (
79
77
`await userEvent.keyboard(${ formatAsJSLiteral ( `{${ step . key } >}` ) } )` ,
80
78
)
81
79
break
82
- case " keyUp" :
80
+ case ' keyUp' :
83
81
out . appendLine (
84
82
`await userEvent.keyboard(${ formatAsJSLiteral ( `{/${ step . key } }` ) } )` ,
85
83
)
86
84
break
87
- case " navigate" :
85
+ case ' navigate' :
88
86
if (
89
87
! flow ||
90
- step === flow . steps . find ( ( step ) => step . type === " navigate" )
88
+ step === flow . steps . find ( step => step . type === ' navigate' )
91
89
) {
92
- for ( const { url, title } of step . assertedEvents ?? [ ] ) {
90
+ for ( const { url, title} of step . assertedEvents ?? [ ] ) {
93
91
if ( url ) {
94
- out . appendLine ( `expect(location.href).toBe(" ${ url } " )` )
92
+ out . appendLine ( `expect(location.href).toBe(\' ${ url } \' )` )
95
93
}
96
94
if ( title ) {
97
95
out . appendLine (
@@ -101,16 +99,16 @@ export class Extension implements StringifyExtension {
101
99
}
102
100
} else {
103
101
console . log (
104
- " Warning: Testing Library does not currently handle more than one navigation step per test." ,
102
+ ' Warning: Testing Library does not currently handle more than one navigation step per test.' ,
105
103
)
106
104
}
107
105
break
108
- case " waitForElement" :
106
+ case ' waitForElement' :
109
107
out . appendLine (
110
108
`await waitFor(() => ${ stringifySelector ( step . selectors [ 0 ] ) } )` ,
111
109
)
112
110
break
113
- case " waitForExpression" :
111
+ case ' waitForExpression' :
114
112
out . appendLine ( `await waitFor(() => ${ step . expression } )` )
115
113
break
116
114
default :
@@ -122,13 +120,13 @@ export class Extension implements StringifyExtension {
122
120
}
123
121
124
122
export function formatAsJSLiteral ( value : string ) {
125
- return `" ${ value . replace ( / " / g, '\\"' ) } " `
123
+ return `' ${ value . replace ( / ' / g, "\\'" ) } ' `
126
124
}
127
125
128
126
export function stringifySelector ( selector : Selector ) {
129
127
const selectorString = Array . isArray ( selector ) ? selector [ 0 ] : selector
130
128
131
- if ( selectorString . startsWith ( " aria/" ) ) {
129
+ if ( selectorString . startsWith ( ' aria/' ) ) {
132
130
return `screen.getByText(${ formatAsJSLiteral ( selectorString . slice ( 5 ) ) } )`
133
131
} else {
134
132
return `document.querySelector(${ formatAsJSLiteral ( selectorString ) } )`
@@ -139,19 +137,19 @@ export class RecorderPlugin
139
137
implements chrome . devtools . recorder . RecorderExtensionPlugin
140
138
{
141
139
stringify ( recording : UserFlow ) {
142
- return stringify ( recording , { extension : new Extension ( ) } )
140
+ return stringify ( recording , { extension : new Extension ( ) } )
143
141
}
144
142
145
143
stringifyStep ( step : Step ) {
146
- return stringifyStep ( step , { extension : new Extension ( ) } )
144
+ return stringifyStep ( step , { extension : new Extension ( ) } )
147
145
}
148
146
}
149
147
150
148
// istanbul ignore next
151
- if ( process . env . NODE_ENV !== " test" ) {
149
+ if ( process . env . NODE_ENV !== ' test' ) {
152
150
chrome . devtools . recorder . registerRecorderExtensionPlugin (
153
151
new RecorderPlugin ( ) ,
154
- " Testing Library" ,
155
- " application/javascript" ,
152
+ ' Testing Library' ,
153
+ ' application/javascript' ,
156
154
)
157
155
}
0 commit comments