Skip to content

Commit 671cfd8

Browse files
committed
Implement change, hover, doubleClick, and waitForExpression
1 parent 39aa2fc commit 671cfd8

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/index.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,32 @@ export class Extension implements StringifyExtension {
4444

4545
async stringifyStep(out: LineWriter, step: Step, flow: UserFlow) {
4646
switch (step.type) {
47+
case "change":
48+
out.appendLine(
49+
`await userEvent.type(${stringifySelector(
50+
step.selectors[0],
51+
)}, ${JSON.stringify(step.value)})`,
52+
)
53+
break
4754
case "click":
4855
out.appendLine(
4956
`await userEvent.click(${stringifySelector(step.selectors[0])}${
5057
step.button === "secondary" ? ", { buttons: 2 }" : ""
5158
})`,
5259
)
5360
break
61+
case "hover":
62+
out.appendLine(
63+
`await userEvent.hover(${stringifySelector(step.selectors[0])})`,
64+
)
65+
break
66+
case "doubleClick":
67+
out.appendLine(
68+
`await userEvent.dblClick(${stringifySelector(step.selectors[0])}${
69+
step.button === "secondary" ? ", { buttons: 2 }" : ""
70+
})`,
71+
)
72+
break
5473
case "navigate":
5574
if (step === flow.steps.find((step) => step.type === "navigate")) {
5675
for (const { url, title } of step.assertedEvents ?? []) {
@@ -74,6 +93,9 @@ export class Extension implements StringifyExtension {
7493
`await waitFor(() => ${stringifySelector(step.selectors[0])})`,
7594
)
7695
break
96+
case "waitForExpression":
97+
out.appendLine(`await waitFor(() => ${step.expression})`)
98+
break
7799
default:
78100
console.log(
79101
`Warning: Testing Library does not currently handle migrating steps of type: ${step.type}. Please check the output to see how this might affect your test.`,

src/test.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ describe("Extension", () => {
2222

2323
describe("stringifyStep", () => {
2424
test.each<[Step, string]>([
25+
[
26+
{
27+
type: "change",
28+
selectors,
29+
value: "value",
30+
},
31+
'await userEvent.type(screen.getByText("Test"), "value")',
32+
],
2533
[
2634
{
2735
type: "click",
@@ -41,6 +49,22 @@ describe("Extension", () => {
4149
},
4250
'await userEvent.click(screen.getByText("Test"), { buttons: 2 })',
4351
],
52+
[
53+
{
54+
type: "hover",
55+
selectors,
56+
},
57+
'await userEvent.hover(screen.getByText("Test"))',
58+
],
59+
[
60+
{
61+
type: "doubleClick",
62+
selectors,
63+
offsetX: 0,
64+
offsetY: 0,
65+
},
66+
'await userEvent.dblClick(screen.getByText("Test"))',
67+
],
4468
[
4569
{
4670
type: "navigate",
@@ -62,6 +86,13 @@ describe("Extension", () => {
6286
},
6387
'await waitFor(() => screen.getByText("Test"))',
6488
],
89+
[
90+
{
91+
type: "waitForExpression",
92+
expression: "Promise.resolve()",
93+
},
94+
"await waitFor(() => Promise.resolve())",
95+
],
6596
])("%p", async (step, expected) => {
6697
const writer = new LineWriterImpl(" ")
6798
await extension.stringifyStep(writer, step, { title: "", steps: [step] })

0 commit comments

Comments
 (0)