@@ -65,20 +65,6 @@ describe("FastBoot", function() {
6565 } ) ;
6666 } ) ;
6767
68- it ( "renders an empty page if the resilient flag is set" , function ( ) {
69- let middleware = fastbootMiddleware ( {
70- distPath : fixture ( 'rejected-promise' ) ,
71- resilient : true
72- } ) ;
73- server = new TestHTTPServer ( middleware ) ;
74-
75- return server . start ( )
76- . then ( ( ) => server . request ( '/' ) )
77- . then ( html => {
78- expect ( html ) . to . not . match ( / e r r o r / ) ;
79- } ) ;
80- } ) ;
81-
8268 it ( "can be provided with a custom FastBoot instance" , function ( ) {
8369 let fastboot = new FastBoot ( {
8470 distPath : fixture ( 'basic-app' )
@@ -133,4 +119,103 @@ describe("FastBoot", function() {
133119 } ) ;
134120 }
135121 } ) ;
122+
123+ describe ( 'when reslient mode is enabled' , function ( ) {
124+ it ( "renders no FastBoot markup" , function ( ) {
125+ let middleware = fastbootMiddleware ( {
126+ distPath : fixture ( 'rejected-promise' ) ,
127+ resilient : true
128+ } ) ;
129+ server = new TestHTTPServer ( middleware ) ;
130+
131+ return server . start ( )
132+ . then ( ( ) => server . request ( '/' ) )
133+ . then ( html => {
134+ expect ( html ) . to . not . match ( / e r r o r / ) ;
135+ } ) ;
136+ } ) ;
137+
138+ it ( "propagates to error handling middleware" , function ( ) {
139+ let middleware = fastbootMiddleware ( {
140+ distPath : fixture ( 'rejected-promise' ) ,
141+ resilient : true
142+ } ) ;
143+ server = new TestHTTPServer ( middleware , { errorHandling : true } ) ;
144+
145+ return server . start ( )
146+ . then ( ( ) => server . request ( '/' , { resolveWithFullResponse : true } ) )
147+ . then ( ( { body, statusCode, headers } ) => {
148+ expect ( statusCode ) . to . equal ( 200 ) ;
149+ expect ( headers [ 'x-test-error' ] ) . to . match ( / e r r o r h a n d l e r c a l l e d / ) ;
150+ expect ( body ) . to . match ( / h e l l o w o r l d / ) ;
151+ } ) ;
152+ } ) ;
153+
154+ it ( "is does not propagate errors when and there is no error handling middleware" , function ( ) {
155+ let middleware = fastbootMiddleware ( {
156+ distPath : fixture ( 'rejected-promise' ) ,
157+ resilient : true ,
158+ } ) ;
159+ server = new TestHTTPServer ( middleware , { errorHandling : false } ) ;
160+
161+ return server . start ( )
162+ . then ( ( ) => server . request ( '/' , { resolveWithFullResponse : true } ) )
163+ . then ( ( { body, statusCode, headers } ) => {
164+ expect ( statusCode ) . to . equal ( 200 ) ;
165+ expect ( headers [ 'x-test-error' ] ) . to . not . match ( / e r r o r h a n d l e r c a l l e d / ) ;
166+ expect ( body ) . to . not . match ( / e r r o r / ) ;
167+ expect ( body ) . to . match ( / h e l l o w o r l d / ) ;
168+ } ) ;
169+ } ) ;
170+
171+ it ( "allows post-fastboot middleware to recover the response when it fails" , function ( ) {
172+ let middleware = fastbootMiddleware ( {
173+ distPath : fixture ( 'rejected-promise' ) ,
174+ resilient : true
175+ } ) ;
176+ server = new TestHTTPServer ( middleware , { recoverErrors : true } ) ;
177+
178+ return server . start ( )
179+ . then ( ( ) => server . request ( '/' , { resolveWithFullResponse : true } ) )
180+ . then ( ( { body, statusCode, headers } ) => {
181+ expect ( statusCode ) . to . equal ( 200 ) ;
182+ expect ( headers [ 'x-test-recovery' ] ) . to . match ( / r e c o v e r e d r e s p o n s e / ) ;
183+ expect ( body ) . to . match ( / h e l l o w o r l d / ) ;
184+ } ) ;
185+ } ) ;
186+ } ) ;
187+
188+ describe ( 'when reslient mode is disabled' , function ( ) {
189+ it ( "propagates to error handling middleware" , function ( ) {
190+ let middleware = fastbootMiddleware ( {
191+ distPath : fixture ( 'rejected-promise' ) ,
192+ resilient : false ,
193+ } ) ;
194+ server = new TestHTTPServer ( middleware , { errorHandling : true } ) ;
195+
196+ return server . start ( )
197+ . then ( ( ) => server . request ( '/' , { resolveWithFullResponse : true } ) )
198+ . catch ( ( { statusCode, response : { headers } } ) => {
199+ expect ( statusCode ) . to . equal ( 500 ) ;
200+ expect ( headers [ 'x-test-error' ] ) . to . match ( / e r r o r h a n d l e r c a l l e d / ) ;
201+ } ) ;
202+ } ) ;
203+
204+ it ( "allows post-fastboot middleware to recover the response when it fails" , function ( ) {
205+ let middleware = fastbootMiddleware ( {
206+ distPath : fixture ( 'rejected-promise' ) ,
207+ resilient : false
208+ } ) ;
209+ server = new TestHTTPServer ( middleware , { recoverErrors : true } ) ;
210+
211+ return server . start ( )
212+ . then ( ( ) => server . request ( '/' , { resolveWithFullResponse : true } ) )
213+ . then ( ( { body, statusCode, headers } ) => {
214+ expect ( statusCode ) . to . equal ( 200 ) ;
215+ expect ( headers [ 'x-test-recovery' ] ) . to . match ( / r e c o v e r e d r e s p o n s e / ) ;
216+ expect ( body ) . to . match ( / h e l l o w o r l d / ) ;
217+ } ) ;
218+ } ) ;
219+ } ) ;
220+
136221} ) ;
0 commit comments