@@ -22,6 +22,23 @@ describe('Error handling', () => {
22
22
} )
23
23
} )
24
24
25
+ // hooks that can return promise
26
+ ; [
27
+ [ 'beforeCreate' , 'beforeCreate hook' ] ,
28
+ [ 'created' , 'created hook' ] ,
29
+ [ 'beforeMount' , 'beforeMount hook' ] ,
30
+ [ 'mounted' , 'mounted hook' ] ,
31
+ [ 'event' , 'event handler for "e"' ]
32
+ ] . forEach ( ( [ type , description ] ) => {
33
+ it ( `should recover from promise errors in ${ type } ` , done => {
34
+ createTestInstance ( components [ `${ type } Async` ] )
35
+ waitForUpdate ( ( ) => {
36
+ expect ( `Error in ${ description } ` ) . toHaveBeenWarned ( )
37
+ expect ( `Error: ${ type } ` ) . toHaveBeenWarned ( )
38
+ } ) . then ( done )
39
+ } )
40
+ } )
41
+
25
42
// error in mounted hook should affect neither child nor parent
26
43
it ( 'should recover from errors in mounted hook' , done => {
27
44
const vm = createTestInstance ( components . mounted )
@@ -45,6 +62,20 @@ describe('Error handling', () => {
45
62
} )
46
63
} )
47
64
65
+ // hooks that can return promise
66
+ ; [
67
+ [ 'beforeUpdate' , 'beforeUpdate hook' ] ,
68
+ [ 'updated' , 'updated hook' ]
69
+ ] . forEach ( ( [ type , description ] ) => {
70
+ it ( `should recover from promise errors in ${ type } hook` , done => {
71
+ const vm = createTestInstance ( components [ `${ type } Async` ] )
72
+ assertBothInstancesActive ( vm ) . then ( ( ) => {
73
+ expect ( `Error in ${ description } ` ) . toHaveBeenWarned ( )
74
+ expect ( `Error: ${ type } ` ) . toHaveBeenWarned ( )
75
+ } ) . then ( done )
76
+ } )
77
+ } )
78
+
48
79
; [
49
80
[ 'beforeDestroy' , 'beforeDestroy hook' ] ,
50
81
[ 'destroyed' , 'destroyed hook' ] ,
@@ -62,6 +93,21 @@ describe('Error handling', () => {
62
93
} )
63
94
} )
64
95
96
+ ; [
97
+ [ 'beforeDestroy' , 'beforeDestroy hook' ] ,
98
+ [ 'destroyed' , 'destroyed hook' ]
99
+ ] . forEach ( ( [ type , description ] ) => {
100
+ it ( `should recover from promise errors in ${ type } hook` , done => {
101
+ const vm = createTestInstance ( components [ `${ type } Async` ] )
102
+ vm . ok = false
103
+ setTimeout ( ( ) => {
104
+ expect ( `Error in ${ description } ` ) . toHaveBeenWarned ( )
105
+ expect ( `Error: ${ type } ` ) . toHaveBeenWarned ( )
106
+ assertRootInstanceActive ( vm ) . then ( done )
107
+ } )
108
+ } )
109
+ } )
110
+
65
111
it ( 'should recover from errors in user watcher getter' , done => {
66
112
const vm = createTestInstance ( components . userWatcherGetter )
67
113
vm . n ++
@@ -178,6 +224,16 @@ function createErrorTestComponents () {
178
224
throw new Error ( before )
179
225
}
180
226
227
+ const beforeCompAsync = components [ `${ before } Async` ] = {
228
+ props : [ 'n' ] ,
229
+ render ( h ) {
230
+ return h ( 'div' , this . n )
231
+ }
232
+ }
233
+ beforeCompAsync [ before ] = function ( ) {
234
+ return new Promise ( ( resolve , reject ) => reject ( new Error ( before ) ) )
235
+ }
236
+
181
237
// after
182
238
const after = hook . replace ( / e ? $ / , 'ed' )
183
239
const afterComp = components [ after ] = {
@@ -189,6 +245,16 @@ function createErrorTestComponents () {
189
245
afterComp [ after ] = function ( ) {
190
246
throw new Error ( after )
191
247
}
248
+
249
+ const afterCompAsync = components [ `${ after } Async` ] = {
250
+ props : [ 'n' ] ,
251
+ render ( h ) {
252
+ return h ( 'div' , this . n )
253
+ }
254
+ }
255
+ afterCompAsync [ after ] = function ( ) {
256
+ return new Promise ( ( resolve , reject ) => reject ( new Error ( after ) ) )
257
+ }
192
258
} )
193
259
194
260
// directive hooks errors
@@ -247,6 +313,18 @@ function createErrorTestComponents () {
247
313
}
248
314
}
249
315
316
+ components . eventAsync = {
317
+ beforeCreate ( ) {
318
+ this . $on ( 'e' , ( ) => new Promise ( ( resolve , reject ) => reject ( new Error ( 'event' ) ) ) )
319
+ } ,
320
+ mounted ( ) {
321
+ this . $emit ( 'e' )
322
+ } ,
323
+ render ( h ) {
324
+ return h ( 'div' )
325
+ }
326
+ }
327
+
250
328
return components
251
329
}
252
330
0 commit comments