@@ -22,4 +22,63 @@ describe('asyncComponent', () => {
2222 setTimeout ( resolve , resolveDelay + 10 ) ,
2323 ) . then ( ( ) => expect ( setStateSpy . callCount ) . toEqual ( 1 ) )
2424 } )
25+
26+ describe ( 'in a browser environment' , ( ) => {
27+ let oldWindow
28+ beforeAll ( ( ) => {
29+ oldWindow = window
30+ global . window = { }
31+ } )
32+ afterAll ( ( ) => {
33+ global . window = oldWindow
34+ } )
35+ describe ( 'when an error occurs resolving a component' , ( ) => {
36+ it . only ( 'should render the ErrorComponent' , ( ) => {
37+ const resolveDelay = 10
38+ const Bob = asyncComponent ( {
39+ resolve : ( ) =>
40+ new Promise ( ( resolve , reject ) =>
41+ setTimeout (
42+ ( ) => reject ( new Error ( 'failed to resolve' ) ) ,
43+ resolveDelay ,
44+ ) ,
45+ ) ,
46+ ErrorComponent : ( { error } ) => < div > { error . message } </ div > ,
47+ } )
48+ const renderWrapper = mount ( < Bob /> )
49+ return new Promise ( resolve =>
50+ setTimeout ( resolve , resolveDelay + 100 ) ,
51+ ) . then ( ( ) => expect ( renderWrapper ) . toMatchSnapshot ( ) )
52+ } )
53+ } )
54+ } )
55+ describe ( 'in a server environment' , ( ) => {
56+ let oldWindow
57+ beforeAll ( ( ) => {
58+ oldWindow = window
59+ global . window = undefined
60+ } )
61+ afterAll ( ( ) => {
62+ global . window = oldWindow
63+ } )
64+ describe ( 'when an error occurs resolving a component' , ( ) => {
65+ it ( 'should render the ErrorComponent' , ( ) => {
66+ const resolveDelay = 10
67+ const Bob = asyncComponent ( {
68+ resolve : ( ) =>
69+ new Promise ( ( resolve , reject ) =>
70+ setTimeout (
71+ ( ) => reject ( new Error ( 'failed to resolve' ) ) ,
72+ resolveDelay ,
73+ ) ,
74+ ) ,
75+ ErrorComponent : ( { error } ) => < div > { error . message } </ div > ,
76+ } )
77+ const renderWrapper = mount ( < Bob /> )
78+ return new Promise ( resolve =>
79+ setTimeout ( resolve , resolveDelay + 50 ) ,
80+ ) . then ( ( ) => expect ( renderWrapper ) . toMatchSnapshot ( ) )
81+ } )
82+ } )
83+ } )
2584} )
0 commit comments