|
1 |
| -import { RenderHookOptions } from "@testing-library/react"; |
2 |
| -import { createRenderStream } from "./renderStream/createRenderStream.js"; |
3 |
| -import type { NextRenderOptions } from "./renderStream/createRenderStream.js"; |
| 1 | +import {RenderHookOptions} from '@testing-library/react' |
| 2 | +import {createRenderStream} from './renderStream/createRenderStream.js' |
| 3 | +import type {NextRenderOptions} from './renderStream/createRenderStream.js' |
4 | 4 |
|
5 |
| -import { Render } from "./renderStream/Render.js"; |
6 |
| -import { createElement } from "rehackt"; |
7 |
| -import { Assertable, assertableSymbol, markAssertable } from "./assertable.js"; |
| 5 | +import {Render} from './renderStream/Render.js' |
| 6 | +import {createElement} from 'rehackt' |
| 7 | +import {Assertable, assertableSymbol, markAssertable} from './assertable.js' |
8 | 8 |
|
9 | 9 | export interface SnapshotStream<Snapshot, Props> extends Assertable {
|
10 | 10 | /**
|
11 | 11 | * An array of all renders that have happened so far.
|
12 | 12 | * Errors thrown during component render will be captured here, too.
|
13 | 13 | */
|
14 | 14 | renders: Array<
|
15 |
| - | Render<{ value: Snapshot }> |
16 |
| - | { phase: "snapshotError"; count: number; error: unknown } |
17 |
| - >; |
| 15 | + | Render<{value: Snapshot}> |
| 16 | + | {phase: 'snapshotError'; count: number; error: unknown} |
| 17 | + > |
18 | 18 | /**
|
19 | 19 | * Peeks the next render from the current iterator position, without advancing the iterator.
|
20 | 20 | * If no render has happened yet, it will wait for the next render to happen.
|
21 | 21 | * @throws {WaitForRenderTimeoutError} if no render happens within the timeout
|
22 | 22 | */
|
23 |
| - peekSnapshot(options?: NextRenderOptions): Promise<Snapshot>; |
| 23 | + peekSnapshot(options?: NextRenderOptions): Promise<Snapshot> |
24 | 24 | /**
|
25 | 25 | * Iterates to the next render and returns it.
|
26 | 26 | * If no render has happened yet, it will wait for the next render to happen.
|
27 | 27 | * @throws {WaitForRenderTimeoutError} if no render happens within the timeout
|
28 | 28 | */
|
29 | 29 | takeSnapshot: Assertable &
|
30 |
| - ((options?: NextRenderOptions) => Promise<Snapshot>); |
| 30 | + ((options?: NextRenderOptions) => Promise<Snapshot>) |
31 | 31 | /**
|
32 | 32 | * Returns the total number of renders.
|
33 | 33 | */
|
34 |
| - totalSnapshotCount(): number; |
| 34 | + totalSnapshotCount(): number |
35 | 35 | /**
|
36 | 36 | * Returns the current render.
|
37 | 37 | * @throws {Error} if no render has happened yet
|
38 | 38 | */
|
39 |
| - getCurrentSnapshot(): Snapshot; |
| 39 | + getCurrentSnapshot(): Snapshot |
40 | 40 | /**
|
41 | 41 | * Waits for the next render to happen.
|
42 | 42 | * Does not advance the render iterator.
|
43 | 43 | */
|
44 |
| - waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot>; |
45 |
| - rerender: (rerenderCallbackProps: Props) => void; |
46 |
| - unmount: () => void; |
| 44 | + waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot> |
| 45 | + rerender: (rerenderCallbackProps: Props) => void |
| 46 | + unmount: () => void |
47 | 47 | }
|
48 | 48 |
|
49 | 49 | export function renderHookToSnapshotStream<ReturnValue, Props extends {}>(
|
50 | 50 | renderCallback: (props: Props) => ReturnValue,
|
51 |
| - { initialProps, ...options }: RenderHookOptions<Props> = {} |
| 51 | + {initialProps, ...options}: RenderHookOptions<Props> = {}, |
52 | 52 | ): SnapshotStream<ReturnValue, Props> {
|
53 |
| - const { render, ...stream } = createRenderStream<{ value: ReturnValue }>(); |
| 53 | + const {render, ...stream} = createRenderStream<{value: ReturnValue}>() |
54 | 54 |
|
55 |
| - const HookComponent: React.FC<Props> = (props) => { |
56 |
| - stream.replaceSnapshot({ value: renderCallback(props) }); |
57 |
| - return null; |
58 |
| - }; |
| 55 | + const HookComponent: React.FC<Props> = props => { |
| 56 | + stream.replaceSnapshot({value: renderCallback(props)}) |
| 57 | + return null |
| 58 | + } |
59 | 59 |
|
60 |
| - const { rerender: baseRerender, unmount } = render( |
| 60 | + const {rerender: baseRerender, unmount} = render( |
61 | 61 | createElement(HookComponent, initialProps),
|
62 |
| - options |
63 |
| - ); |
| 62 | + options, |
| 63 | + ) |
64 | 64 |
|
65 | 65 | function rerender(rerenderCallbackProps: Props) {
|
66 |
| - return baseRerender(createElement(HookComponent, rerenderCallbackProps)); |
| 66 | + return baseRerender(createElement(HookComponent, rerenderCallbackProps)) |
67 | 67 | }
|
68 | 68 |
|
69 | 69 | return {
|
70 | 70 | [assertableSymbol]: stream,
|
71 | 71 | renders: stream.renders,
|
72 | 72 | totalSnapshotCount: stream.totalRenderCount,
|
73 | 73 | async peekSnapshot(options) {
|
74 |
| - return (await stream.peekRender(options)).snapshot.value; |
| 74 | + return (await stream.peekRender(options)).snapshot.value |
75 | 75 | },
|
76 | 76 | takeSnapshot: markAssertable(async function takeSnapshot(options) {
|
77 |
| - return (await stream.takeRender(options)).snapshot.value; |
| 77 | + return (await stream.takeRender(options)).snapshot.value |
78 | 78 | }, stream),
|
79 | 79 | getCurrentSnapshot() {
|
80 |
| - return stream.getCurrentRender().snapshot.value; |
| 80 | + return stream.getCurrentRender().snapshot.value |
81 | 81 | },
|
82 | 82 | async waitForNextSnapshot(options) {
|
83 |
| - return (await stream.waitForNextRender(options)).snapshot.value; |
| 83 | + return (await stream.waitForNextRender(options)).snapshot.value |
84 | 84 | },
|
85 | 85 | rerender,
|
86 | 86 | unmount,
|
87 |
| - }; |
| 87 | + } |
88 | 88 | }
|
0 commit comments