diff --git a/src/pure.ts b/src/pure.ts index 34e48f8d7..c1ad3e00d 100644 --- a/src/pure.ts +++ b/src/pure.ts @@ -1,7 +1,7 @@ import act from './act'; import cleanup from './cleanup'; import fireEvent from './fireEvent'; -import render, { RenderResult } from './render'; +import render from './render'; import waitFor from './waitFor'; import waitForElementToBeRemoved from './waitForElementToBeRemoved'; import { within, getQueriesForElement } from './within'; @@ -9,8 +9,12 @@ import { getDefaultNormalizer } from './matches'; import { renderHook } from './renderHook'; import { screen } from './screen'; -export type { RenderResult }; -export type RenderAPI = RenderResult; +export type { + RenderOptions, + RenderResult, + RenderResult as RenderAPI, +} from './render'; +export type { RenderHookOptions, RenderHookResult } from './renderHook'; export { act }; export { cleanup }; diff --git a/src/render.tsx b/src/render.tsx index 7f8142c60..20ce89487 100644 --- a/src/render.tsx +++ b/src/render.tsx @@ -8,10 +8,11 @@ import debugDeep from './helpers/debugDeep'; import { getQueriesForElement } from './within'; import { setRenderResult } from './screen'; -type Options = { +export type RenderOptions = { wrapper?: React.ComponentType; createNodeMock?: (element: React.ReactElement) => any; }; + type TestRendererOptions = { createNodeMock: (element: React.ReactElement) => any; }; @@ -24,7 +25,7 @@ export type RenderResult = ReturnType; */ export default function render( component: React.ReactElement, - { wrapper: Wrapper, createNodeMock }: Options = {} + { wrapper: Wrapper, createNodeMock }: RenderOptions = {} ) { const wrap = (innerElement: React.ReactElement) => Wrapper ? {innerElement} : innerElement; diff --git a/src/renderHook.tsx b/src/renderHook.tsx index 35760384b..35965d00a 100644 --- a/src/renderHook.tsx +++ b/src/renderHook.tsx @@ -2,13 +2,17 @@ import React from 'react'; import type { ComponentType } from 'react'; import render from './render'; -interface RenderHookResult { +export type RenderHookResult = { rerender: (props: Props) => void; result: { current: Result }; unmount: () => void; -} +}; -type RenderHookOptions = Props extends object | string | number | boolean +export type RenderHookOptions = Props extends + | object + | string + | number + | boolean ? { initialProps: Props; wrapper?: ComponentType; diff --git a/typings/index.flow.js b/typings/index.flow.js index f371cc9cc..b8f2ec0f1 100644 --- a/typings/index.flow.js +++ b/typings/index.flow.js @@ -68,6 +68,7 @@ type WaitForOptions = { interval?: number, onTimeout?: (error: mixed) => Error, }; + type WaitForFunction = ( expectation: () => T, options?: WaitForOptions @@ -289,11 +290,6 @@ interface Thenable { then: (resolve: () => any, reject?: () => any) => any; } -interface RenderOptions { - wrapper?: React.ComponentType; - createNodeMock?: (element: React.Element) => any; -} - type Debug = { (message?: string): void, shallow: (message?: string) => void, @@ -307,15 +303,6 @@ type Queries = ByTextQueries & UnsafeByPropsQueries & A11yAPI; -interface RenderAPI extends Queries { - update(nextElement: React.Element): void; - rerender(nextElement: React.Element): void; - unmount(nextElement?: React.Element): void; - toJSON(): ReactTestRendererJSON[] | ReactTestRendererJSON | null; - debug: Debug; - container: ReactTestInstance; -} - type FireEventFunction = ( element: ReactTestInstance, eventName: string, @@ -328,24 +315,29 @@ type FireEventAPI = FireEventFunction & { scroll: (element: ReactTestInstance, ...data: Array) => any, }; -type RenderHookResult = { - rerender: (props: Props) => void, - result: { current: Result }, - unmount: () => void, -}; - -type RenderHookOptions = { - initialProps?: Props, - wrapper?: React.ComponentType, -}; - declare module '@testing-library/react-native' { + declare interface RenderResult extends Queries { + update(nextElement: React.Element): void; + rerender(nextElement: React.Element): void; + unmount(nextElement?: React.Element): void; + toJSON(): ReactTestRendererJSON[] | ReactTestRendererJSON | null; + debug: Debug; + container: ReactTestInstance; + } + + declare type RenderAPI = RenderResult; + + declare interface RenderOptions { + wrapper?: React.ComponentType; + createNodeMock?: (element: React.Element) => any; + } + declare export var render: ( component: React.Element, options?: RenderOptions - ) => RenderAPI; + ) => RenderResult; - declare export var screen: RenderAPI; + declare export var screen: RenderResult; declare export var cleanup: () => void; declare export var fireEvent: FireEventAPI; @@ -369,6 +361,17 @@ declare module '@testing-library/react-native' { normalizerConfig?: NormalizerConfig ) => NormalizerFn; + declare type RenderHookResult = { + rerender: (props: Props) => void, + result: { current: Result }, + unmount: () => void, + }; + + declare type RenderHookOptions = { + initialProps?: Props, + wrapper?: React.ComponentType, + }; + declare type RenderHookFunction = ( renderCallback: (props: Props) => Result, options?: RenderHookOptions