@@ -9,27 +9,37 @@ import debugShallow from './helpers/debugShallow';
99import debugDeep from './helpers/debugDeep' ;
1010
1111type Options = {
12+ wrapper ?: React . ComponentType < any > ,
13+ createNodeMock ?: ( element : React . Element < any > ) => any ,
14+ } ;
15+ type TestRendererOptions = {
1216 createNodeMock : ( element : React . Element < any > ) => any ,
1317} ;
1418
1519/**
1620 * Renders test component deeply using react-test-renderer and exposes helpers
1721 * to assert on the output.
1822 */
19- export default function render (
20- component : React . Element < any > ,
21- options ?: Options
23+ export default function render < T > (
24+ component: React.Element< T > ,
25+ { wrapper : Wrapper , createNodeMock } : Options = { }
2226) {
23- const renderer = renderWithAct ( component , options ) ;
27+ const wrap = ( innerElement : React . Element < any > ) =>
28+ Wrapper ? < Wrapper > { innerElement } </ Wrapper > : innerElement ;
2429
30+ const renderer = renderWithAct (
31+ wrap ( component ) ,
32+ createNodeMock ? { createNodeMock } : undefined
33+ ) ;
34+ const update = updateWithAct ( renderer , wrap ) ;
2535 const instance = renderer . root ;
2636
2737 return {
2838 ...getByAPI ( instance ) ,
2939 ...queryByAPI ( instance ) ,
3040 ...a11yAPI ( instance ) ,
31- update : updateWithAct ( renderer ) ,
32- rerender : updateWithAct ( renderer ) , // alias for `update`
41+ update,
42+ rerender : update , // alias for `update`
3343 unmount : renderer . unmount ,
3444 toJSON : renderer . toJSON ,
3545 debug : debug ( instance , renderer ) ,
@@ -38,7 +48,7 @@ export default function render(
3848
3949function renderWithAct(
4050 component: React.Element< any > ,
41- options ?: Options
51+ options?: TestRendererOptions
4252): ReactTestRenderer {
4353 let renderer : ReactTestRenderer ;
4454
@@ -49,10 +59,13 @@ function renderWithAct(
4959 return ( ( renderer : any ) : ReactTestRenderer ) ;
5060}
5161
52- function updateWithAct ( renderer : ReactTestRenderer ) {
62+ function updateWithAct(
63+ renderer: ReactTestRenderer,
64+ wrap: (innerElement: React.Element< any > ) => React . Element < any >
65+ ) {
5366 return function ( component : React . Element < any > ) {
5467 act ( ( ) => {
55- renderer . update ( component ) ;
68+ renderer . update ( wrap ( component ) ) ;
5669 } ) ;
5770 } ;
5871}
0 commit comments