Skip to content

Commit 93cd015

Browse files
committed
test(dom): fix flaky test
1 parent 3c57882 commit 93cd015

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

packages/dom/src/batchUpdates.test.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import React, { Component, ErrorInfo, useLayoutEffect } from "react"
1+
import React, { Component, ErrorInfo, useEffect } from "react"
22
import { Observable, from, throwError } from "rxjs"
33
import { delay, startWith } from "rxjs/operators"
4-
import { bind } from "@react-rxjs/core"
4+
import { bind, Subscribe } from "@react-rxjs/core"
55
import { batchUpdates } from "./"
66
import { render, screen } from "@testing-library/react"
77

88
const wait = (ms: number) => new Promise((res) => setTimeout(res, ms))
99

10-
const [useLatestNumber] = bind((id: string, batched: boolean) =>
10+
const [useLatestNumber, latestNumber$] = bind((id: string, batched: boolean) =>
1111
(id === "error"
1212
? throwError("controlled error")
1313
: from([1, 2, 3, 4, 5])
@@ -54,13 +54,13 @@ interface Props {
5454
}
5555
const Grandson: React.FC<Props> = ({ onRender, batched, id }) => {
5656
const latestNumber = useLatestNumber(id, batched)
57-
useLayoutEffect(onRender)
57+
useEffect(onRender)
5858
return <div>Grandson {latestNumber}</div>
5959
}
6060

6161
const Son: React.FC<Props> = (props) => {
6262
const latestNumber = useLatestNumber(props.id, props.batched)
63-
useLayoutEffect(props.onRender)
63+
useEffect(props.onRender)
6464
return (
6565
<div>
6666
Son {latestNumber}
@@ -71,7 +71,7 @@ const Son: React.FC<Props> = (props) => {
7171

7272
const Father: React.FC<Props> = (props) => {
7373
const latestNumber = useLatestNumber(props.id, props.batched)
74-
useLayoutEffect(props.onRender)
74+
useEffect(props.onRender)
7575
return (
7676
<div>
7777
Father {latestNumber}
@@ -97,7 +97,11 @@ describe("batchUpdates", () => {
9797

9898
test("it triggers nested updates when batchUpdates is not used", async () => {
9999
const mockFn = jest.fn()
100-
render(<Father id="noBatching" batched={false} onRender={mockFn} />)
100+
render(
101+
<Subscribe source$={latestNumber$("noBatching", false)}>
102+
<Father id="noBatching" batched={false} onRender={mockFn} />
103+
</Subscribe>,
104+
)
101105
expect(screen.queryByText("Father 0")).not.toBeNull()
102106
expect(screen.queryByText("Son 0")).not.toBeNull()
103107
expect(screen.queryByText("Grandson 0")).not.toBeNull()
@@ -113,7 +117,12 @@ describe("batchUpdates", () => {
113117

114118
test("batchUpdates prevents unnecessary updates", async () => {
115119
const mockFn = jest.fn()
116-
render(<Father id="batchingAndComplete" batched={true} onRender={mockFn} />)
120+
render(
121+
<Subscribe source$={latestNumber$("batchingAndComplete", true)}>
122+
<Father id="batchingAndComplete" batched onRender={mockFn} />
123+
</Subscribe>,
124+
)
125+
117126
expect(screen.queryByText("Father 0")).not.toBeNull()
118127
expect(screen.queryByText("Son 0")).not.toBeNull()
119128
expect(screen.queryByText("Grandson 0")).not.toBeNull()

0 commit comments

Comments
 (0)