A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/vuejs/vue/commit/6e9fcfc81d922a1b188268bf50d7e67c07d6d662 below:

sync/async error handling for lifecycle hooks and v-on … · vuejs/vue@6e9fcfc · GitHub

@@ -22,6 +22,23 @@ describe('Error handling', () => {

22 22

})

23 23

})

24 24 25 +

// hooks that can return rejected 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 rejected 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++

@@ -152,6 +198,40 @@ describe('Error handling', () => {

152 198

expect(vm.$el.textContent).toContain('error in render')

153 199

Vue.config.errorHandler = null

154 200

})

201 + 202 +

// event handlers that can throw errors or return rejected promise

203 +

;[

204 +

['single handler', '<div v-on:click="bork"></div>'],

205 +

['multiple handlers', '<div v-on="{ click: [bork, function test() {}] }"></div>']

206 +

].forEach(([type, template]) => {

207 +

it(`should recover from v-on errors for ${type} registered`, () => {

208 +

const vm = new Vue({

209 +

template,

210 +

methods: { bork () { throw new Error('v-on') } }

211 +

}).$mount()

212 +

document.body.appendChild(vm.$el)

213 +

triggerEvent(vm.$el, 'click')

214 +

expect('Error in v-on').toHaveBeenWarned()

215 +

expect('Error: v-on').toHaveBeenWarned()

216 +

document.body.removeChild(vm.$el)

217 +

})

218 + 219 +

it(`should recover from v-on async errors for ${type} registered`, (done) => {

220 +

const vm = new Vue({

221 +

template,

222 +

methods: { bork () {

223 +

return new Promise((resolve, reject) => reject(new Error('v-on async')))

224 +

} }

225 +

}).$mount()

226 +

document.body.appendChild(vm.$el)

227 +

triggerEvent(vm.$el, 'click')

228 +

waitForUpdate(() => {

229 +

expect('Error in v-on async').toHaveBeenWarned()

230 +

expect('Error: v-on async').toHaveBeenWarned()

231 +

document.body.removeChild(vm.$el)

232 +

}).then(done)

233 +

})

234 +

})

155 235

})

156 236 157 237

function createErrorTestComponents () {

@@ -188,6 +268,16 @@ function createErrorTestComponents () {

188 268

throw new Error(before)

189 269

}

190 270 271 +

const beforeCompAsync = components[`${before}Async`] = {

272 +

props: ['n'],

273 +

render (h) {

274 +

return h('div', this.n)

275 +

}

276 +

}

277 +

beforeCompAsync[before] = function () {

278 +

return new Promise((resolve, reject) => reject(new Error(before)))

279 +

}

280 + 191 281

// after

192 282

const after = hook.replace(/e?$/, 'ed')

193 283

const afterComp = components[after] = {

@@ -199,6 +289,16 @@ function createErrorTestComponents () {

199 289

afterComp[after] = function () {

200 290

throw new Error(after)

201 291

}

292 + 293 +

const afterCompAsync = components[`${after}Async`] = {

294 +

props: ['n'],

295 +

render (h) {

296 +

return h('div', this.n)

297 +

}

298 +

}

299 +

afterCompAsync[after] = function () {

300 +

return new Promise((resolve, reject) => reject(new Error(after)))

301 +

}

202 302

})

203 303 204 304

// directive hooks errors

@@ -272,6 +372,18 @@ function createErrorTestComponents () {

272 372

}

273 373

}

274 374 375 +

components.eventAsync = {

376 +

beforeCreate () {

377 +

this.$on('e', () => new Promise((resolve, reject) => reject(new Error('event'))))

378 +

},

379 +

mounted () {

380 +

this.$emit('e')

381 +

},

382 +

render (h) {

383 +

return h('div')

384 +

}

385 +

}

386 + 275 387

return components

276 388

}

277 389

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4