@@ -9,18 +9,24 @@ configure({ adapter: new Adapter() })
99const TUNNEL_ID = 'GroompyTunnel'
1010const props = { message : 'Aihop!' }
1111
12- const Msg = ( { message } ) => (
13- < div className = "msg" > { message || 'defaultMessage' } </ div >
14- )
15- Msg . propTypes = { message : PropTypes . string }
12+ class Msg extends React . Component {
13+ componentWillMount ( ) {
14+ this . props . willMount && this . props . willMount ( )
15+ }
16+ render ( ) {
17+ const { message } = this . props
18+ return < div className = "msg" > { message || 'defaultMessage' } </ div >
19+ }
20+ }
21+ Msg . propTypes = { message : PropTypes . string , willMount : PropTypes . func }
1622
1723describe ( 'Tunnel' , ( ) => {
1824 it ( 'should render a tunnel passing props' , ( ) => {
1925 const wrapper = mount (
2026 < TunnelProvider >
2127 < div >
2228 < TunnelPlaceholder id = { TUNNEL_ID } >
23- { ( { message } ) => < span > { message } </ span > }
29+ { ( { message } ) => < Msg message = { message } / >}
2430 </ TunnelPlaceholder >
2531 < Tunnel id = { TUNNEL_ID } { ...props } />
2632 </ div >
@@ -35,7 +41,7 @@ describe('Tunnel', () => {
3541 < div >
3642 < TunnelPlaceholder id = { TUNNEL_ID } />
3743 < Tunnel id = { TUNNEL_ID } >
38- < span > { props . message } </ span >
44+ < Msg message = { props . message } / >
3945 </ Tunnel >
4046 </ div >
4147 </ TunnelProvider > ,
@@ -83,7 +89,7 @@ describe('Tunnel', () => {
8389 const wrapper = mount (
8490 < TunnelProvider >
8591 < TunnelPlaceholder id = { TUNNEL_ID } >
86- { ( { message } ) => < span > { message || 'Empty' } </ span > }
92+ { ( { message } ) => < Msg message = { message || 'Empty' } / >}
8793 </ TunnelPlaceholder >
8894 </ TunnelProvider > ,
8995 )
@@ -102,12 +108,14 @@ describe('Tunnel', () => {
102108
103109 describe ( 'update lifecycle' , ( ) => {
104110 const Component = (
105- { msg, visible } , //eslint-disable-line
111+ { msg, visible, willMount } , //eslint-disable-line
106112 ) => (
107113 < TunnelProvider >
108114 < div >
109115 < TunnelPlaceholder id = { TUNNEL_ID } >
110- { ( { message } ) => < span > { message || 'Empty' } </ span > }
116+ { ( { message } ) => (
117+ < Msg message = { message || 'Empty' } willMount = { willMount } />
118+ ) }
111119 </ TunnelPlaceholder >
112120 { visible && < Tunnel id = { TUNNEL_ID } message = { msg } /> }
113121 </ div >
@@ -136,9 +144,18 @@ describe('Tunnel', () => {
136144 wrapper . setProps ( { visible : false } )
137145 assertTunnelPlaceholderContent ( wrapper , 'Empty' )
138146 } )
147+
148+ it ( 'should keep children mounted on re-render' , ( ) => {
149+ let mountSpy = jest . fn ( )
150+ const wrapper = mount (
151+ < Component msg = { msg1 } visible willMount = { mountSpy } /> ,
152+ )
153+ wrapper . setProps ( { msg : msg2 } )
154+ expect ( mountSpy ) . toHaveBeenCalledTimes ( 1 )
155+ } )
139156 } )
140157
141158 function assertTunnelPlaceholderContent ( wrapper , expectedContent ) {
142- expect ( wrapper . find ( TunnelPlaceholder ) . text ( ) ) . toEqual ( expectedContent )
159+ expect ( wrapper . find ( Msg ) . text ( ) ) . toEqual ( expectedContent )
143160 }
144161} )
0 commit comments