Skip to content

Commit 11d559d

Browse files
committed
unit test
1 parent ffdbefb commit 11d559d

File tree

8 files changed

+686
-489
lines changed

8 files changed

+686
-489
lines changed
Lines changed: 113 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { TestScheduler } from 'rxjs/testing'
22
import { Controller, ControllerProvider, Builder } from '../../src'
3-
import { act, getByTestId, render, waitFor } from '@testing-library/react'
3+
import { act, getByTestId, render } from '@testing-library/react'
44
import { tap } from 'rxjs'
55

6-
const asyncDelay = (ms: number) => new Promise((r) => setTimeout(r, ms))
76
class TestController extends Controller<number> {
87
constructor(initialValue?: number) {
98
super(initialValue ?? 0)
@@ -62,120 +61,161 @@ const DisplayRendered = ({ source, buildWhen, stateComp, callback }: DisplayRend
6261
)
6362
}
6463

65-
it('buildWhen respected', async () => {
64+
it('buildWhen respected', () => {
6665
const buildWhenFn = jest.fn((prev, curr) => prev === curr)
6766
const instance = new TestController()
6867
const { container } = render(
6968
<ControllerProvider ctor={TestController} source={instance}>
7069
<DisplayRendered source={instance} buildWhen={buildWhenFn} />
7170
</ControllerProvider>,
7271
)
73-
await act(async () => {
74-
asyncDelay(500)
72+
act(() => {
7573
instance.inc()
76-
asyncDelay(500)
77-
instance.inc()
78-
asyncDelay(500)
74+
})
75+
act(() => {
7976
instance.inc()
80-
asyncDelay(500)
77+
})
78+
act(() => {
8179
instance.inc()
82-
asyncDelay(500)
80+
})
81+
act(() => {
8382
instance.inc()
8483
})
85-
await waitFor(() => {
86-
expect(buildWhenFn).toHaveBeenCalledTimes(5)
87-
expect(buildWhenFn.mock.calls[0][0]).toBe(0)
88-
expect(buildWhenFn.mock.calls[0][1]).toBe(1)
89-
expect(buildWhenFn.mock.calls[1][0]).toBe(1)
90-
expect(buildWhenFn.mock.calls[1][1]).toBe(2)
91-
expect(buildWhenFn.mock.calls[2][0]).toBe(2)
92-
expect(buildWhenFn.mock.calls[2][1]).toBe(3)
93-
expect(buildWhenFn.mock.calls[3][0]).toBe(3)
94-
expect(buildWhenFn.mock.calls[3][1]).toBe(4)
95-
expect(buildWhenFn.mock.calls[4][0]).toBe(4)
96-
expect(buildWhenFn.mock.calls[4][1]).toBe(5)
97-
const rendered = getByTestId(container, 'text')
98-
const renderedText = rendered.textContent
99-
const expectedText = '0'
100-
expect(renderedText).toBe(expectedText)
84+
act(() => {
85+
instance.inc()
10186
})
87+
88+
expect(buildWhenFn).toHaveBeenCalledTimes(5)
89+
expect(buildWhenFn.mock.calls[0][0]).toBe(0)
90+
expect(buildWhenFn.mock.calls[0][1]).toBe(1)
91+
expect(buildWhenFn.mock.calls[1][0]).toBe(1)
92+
expect(buildWhenFn.mock.calls[1][1]).toBe(2)
93+
expect(buildWhenFn.mock.calls[2][0]).toBe(2)
94+
expect(buildWhenFn.mock.calls[2][1]).toBe(3)
95+
expect(buildWhenFn.mock.calls[3][0]).toBe(3)
96+
expect(buildWhenFn.mock.calls[3][1]).toBe(4)
97+
expect(buildWhenFn.mock.calls[4][0]).toBe(4)
98+
expect(buildWhenFn.mock.calls[4][1]).toBe(5)
99+
const rendered = getByTestId(container, 'text')
100+
const renderedText = rendered.textContent
101+
const expectedText = '0'
102+
expect(renderedText).toBe(expectedText)
102103
})
103104

104-
it('rerender on state changed', async () => {
105+
it('rerender on state changed', () => {
105106
const onRerender = jest.fn((state: number) => state)
106107
const instance = new TestController()
107108
const { container } = render(
108109
<ControllerProvider ctor={TestController} source={instance}>
109110
<DisplayRendered source={instance} callback={onRerender} />
110111
</ControllerProvider>,
111112
)
112-
const rendered = getByTestId(container, 'text')
113-
const renderedText = rendered.textContent
114-
const expectedText = '0'
113+
let rendered = getByTestId(container, 'text')
114+
let renderedText = rendered.textContent
115+
let expectedText = '0'
115116
expect(renderedText).toBe(expectedText)
116-
await act(async () => {
117-
await asyncDelay(500)
118-
instance.inc()
119-
await asyncDelay(500)
117+
118+
act(() => {
120119
instance.inc()
121-
await asyncDelay(500)
120+
})
121+
rendered = getByTestId(container, 'text')
122+
renderedText = rendered.textContent
123+
expectedText = '1'
124+
expect(renderedText).toBe(expectedText)
125+
126+
act(() => {
122127
instance.inc()
123-
await asyncDelay(500)
128+
})
129+
rendered = getByTestId(container, 'text')
130+
renderedText = rendered.textContent
131+
expectedText = '2'
132+
expect(renderedText).toBe(expectedText)
133+
134+
act(() => {
124135
instance.inc()
125-
await asyncDelay(500)
136+
})
137+
rendered = getByTestId(container, 'text')
138+
renderedText = rendered.textContent
139+
expectedText = '3'
140+
expect(renderedText).toBe(expectedText)
141+
142+
act(() => {
126143
instance.inc()
127144
})
128-
await waitFor(() => {
129-
const rendered = getByTestId(container, 'text')
130-
const renderedText = rendered.textContent
131-
const expectedText = '5'
132-
expect(renderedText).toBe(expectedText)
133-
expect(onRerender).toHaveBeenCalledTimes(6)
134-
expect(onRerender.mock.calls[0][0]).toBe(0)
135-
expect(onRerender.mock.calls[1][0]).toBe(1)
136-
expect(onRerender.mock.calls[2][0]).toBe(2)
137-
expect(onRerender.mock.calls[3][0]).toBe(3)
138-
expect(onRerender.mock.calls[4][0]).toBe(4)
139-
expect(onRerender.mock.calls[5][0]).toBe(5)
145+
rendered = getByTestId(container, 'text')
146+
renderedText = rendered.textContent
147+
expectedText = '4'
148+
expect(renderedText).toBe(expectedText)
149+
150+
act(() => {
151+
instance.inc()
140152
})
153+
rendered = getByTestId(container, 'text')
154+
renderedText = rendered.textContent
155+
expectedText = '5'
156+
expect(renderedText).toBe(expectedText)
157+
158+
expect(onRerender).toHaveBeenCalledTimes(6)
159+
expect(onRerender.mock.calls[0][0]).toBe(0)
160+
expect(onRerender.mock.calls[1][0]).toBe(1)
161+
expect(onRerender.mock.calls[2][0]).toBe(2)
162+
expect(onRerender.mock.calls[3][0]).toBe(3)
163+
expect(onRerender.mock.calls[4][0]).toBe(4)
164+
expect(onRerender.mock.calls[5][0]).toBe(5)
141165
})
142166

143-
it('specified state compare respected', async () => {
167+
it('specified state compare respected', () => {
144168
const stateCompareFn = jest.fn((prev, curr) => prev !== curr)
145169
const instance = new TestController()
146170
const { container } = render(
147171
<ControllerProvider ctor={TestController} source={instance}>
148172
<DisplayRendered source={instance} stateComp={stateCompareFn} />
149173
</ControllerProvider>,
150174
)
151-
const rendered = getByTestId(container, 'text')
152-
const renderedText = rendered.textContent
153-
const expectedText = '0'
175+
let rendered = getByTestId(container, 'text')
176+
let renderedText = rendered.textContent
177+
let expectedText = '0'
154178
expect(renderedText).toBe(expectedText)
155179

156-
await act(async () => {
157-
await asyncDelay(500)
158-
instance.inc()
159-
await asyncDelay(500)
180+
act(() => {
160181
instance.inc()
161-
await asyncDelay(500)
182+
})
183+
rendered = getByTestId(container, 'text')
184+
renderedText = rendered.textContent
185+
expectedText = '0'
186+
expect(renderedText).toBe(expectedText)
187+
188+
act(() => {
162189
instance.inc()
163-
await asyncDelay(500)
190+
})
191+
rendered = getByTestId(container, 'text')
192+
renderedText = rendered.textContent
193+
expectedText = '0'
194+
expect(renderedText).toBe(expectedText)
195+
196+
act(() => {
164197
instance.inc()
165198
})
166-
await waitFor(() => {
167-
expect(stateCompareFn).toHaveBeenCalledTimes(4)
168-
expect(stateCompareFn.mock.calls[0][0]).toBe(0)
169-
expect(stateCompareFn.mock.calls[0][1]).toBe(1)
170-
expect(stateCompareFn.mock.calls[1][0]).toBe(0)
171-
expect(stateCompareFn.mock.calls[1][1]).toBe(2)
172-
expect(stateCompareFn.mock.calls[2][0]).toBe(0)
173-
expect(stateCompareFn.mock.calls[2][1]).toBe(3)
174-
expect(stateCompareFn.mock.calls[3][0]).toBe(0)
175-
expect(stateCompareFn.mock.calls[3][1]).toBe(4)
176-
const rendered = getByTestId(container, 'text')
177-
const renderedText = rendered.textContent
178-
const expectedText = '0'
179-
expect(renderedText).toBe(expectedText)
199+
rendered = getByTestId(container, 'text')
200+
renderedText = rendered.textContent
201+
expectedText = '0'
202+
expect(renderedText).toBe(expectedText)
203+
204+
act(() => {
205+
instance.inc()
180206
})
207+
rendered = getByTestId(container, 'text')
208+
renderedText = rendered.textContent
209+
expectedText = '0'
210+
expect(renderedText).toBe(expectedText)
211+
212+
expect(stateCompareFn).toHaveBeenCalledTimes(4)
213+
expect(stateCompareFn.mock.calls[0][0]).toBe(0)
214+
expect(stateCompareFn.mock.calls[0][1]).toBe(1)
215+
expect(stateCompareFn.mock.calls[1][0]).toBe(0)
216+
expect(stateCompareFn.mock.calls[1][1]).toBe(2)
217+
expect(stateCompareFn.mock.calls[2][0]).toBe(0)
218+
expect(stateCompareFn.mock.calls[2][1]).toBe(3)
219+
expect(stateCompareFn.mock.calls[3][0]).toBe(0)
220+
expect(stateCompareFn.mock.calls[3][1]).toBe(4)
181221
})

0 commit comments

Comments
 (0)