Skip to content

Commit e43f9fc

Browse files
committed
set errorHandler to be a default export and set Vue.config.errorHandler = errorHandler in mount
1 parent 54af49b commit e43f9fc

File tree

6 files changed

+49
-48
lines changed

6 files changed

+49
-48
lines changed

src/lib/error-handler.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,19 @@
1-
function errorMessage(msg, info) {
1+
function errorMessage (msg, info) {
22
if (info) {
33
return `${msg} : additional info ${info}`
44
}
55

6-
return msg;
6+
return msg
77
}
88

9-
function setVueErrorHandler(vue) {
10-
vue.config.errorHandler = errorHandler
11-
}
12-
13-
function errorHandler(err, _vm, info) {
9+
export default function errorHandler (err, _vm, info) {
1410
if ((typeof err === 'object') && err.message) {
1511
if (info) {
16-
err.message = errorMessage(err.message, info);
12+
err.message = errorMessage(err.message, info)
1713
}
1814

19-
throw err;
15+
throw err
2016
}
2117

22-
throw new Error(errorMessage(err, info));
23-
}
24-
25-
export {
26-
errorHandler,
27-
setVueErrorHandler
18+
throw new Error(errorMessage(err, info))
2819
}

src/mount.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import createInstance from './lib/create-instance'
77
import cloneDeep from 'lodash/cloneDeep'
88
import createElement from './lib/create-element'
99
import './lib/matches-polyfill'
10-
import { setVueErrorHandler } from './lib/error-handler'
10+
import errorHandler from './lib/error-handler'
1111

1212
Vue.config.productionTip = false
13-
setVueErrorHandler(Vue)
13+
Vue.config.errorHandler = errorHandler
1414

1515
export default function mount (component: Component, options: Options = {}): VueWrapper {
1616
const componentToMount = options.clone === false ? component : cloneDeep(component.extend ? component.options : component)

test/unit/specs/create-local-vue.spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,13 @@ describe('createLocalVue', () => {
112112
const localVue = createLocalVue()
113113
localVue.use(Vuetify)
114114
})
115+
116+
it('throws an error when the component fails to mount', () => {
117+
expect(() => mount({
118+
template: '<div></div>',
119+
mounted: function () {
120+
throw (new Error('Error'))
121+
}
122+
})).to.throw()
123+
})
115124
})
Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,31 @@
1-
import { errorHandler } from '../../../../src/lib/error-handler'
1+
import errorHandler from '../../../../src/lib/error-handler'
22

33
describe('errorHandler', () => {
44
const errorString = 'errorString'
55
const info = 'additional info provided by vue'
6+
const errorObject = new Error(errorString)
67

7-
describe('with Error thrown', () => {
8-
const error = new Error(errorString)
9-
10-
it('rethrows error', () => {
11-
expect(() => errorHandler(error)).to.throw().with.property('message', errorString)
12-
})
8+
it('when error object: rethrows error', () => {
9+
expect(() => errorHandler(errorObject)).to.throw().with.property('message', errorString)
10+
})
1311

14-
it('rethrown error contains vue info when provided', () => {
15-
expect(() => errorHandler(error, {}, info)).to.throw().that.satisfies(function(err) {
16-
const errorMessage = err.message
12+
it('when error object: rethrown error contains vue info when provided', () => {
13+
expect(() => errorHandler(errorObject, {}, info)).to.throw().that.satisfies(function (err) {
14+
const errorMessage = err.message
1715

18-
return errorMessage.includes(errorString) && errorMessage.includes(info)
19-
});
16+
return errorMessage.includes(errorString) && errorMessage.includes(info)
2017
})
2118
})
2219

23-
describe('with not Error object thrown', () => {
24-
const error = errorString
25-
26-
it('throws error with string', () => {
27-
expect(() => errorHandler(error)).to.throw().with.property('message', errorString)
28-
})
20+
it('when error string: throws error with string', () => {
21+
expect(() => errorHandler(errorString)).to.throw().with.property('message', errorString)
22+
})
2923

30-
it('throws error with string and appends info when provided', () => {
31-
expect(() => errorHandler(error, {}, info)).to.throw().that.satisfies(function(err) {
32-
const errorMessage = err.message;
24+
it('throws error with string and appends info when provided', () => {
25+
expect(() => errorHandler(errorString, {}, info)).to.throw().that.satisfies(function (err) {
26+
const errorMessage = err.message
3327

34-
return errorMessage.includes(errorString) && errorMessage.includes(info)
35-
});
28+
return errorMessage.includes(errorString) && errorMessage.includes(info)
3629
})
3730
})
3831
})

test/unit/specs/mount.spec.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,12 @@ describe('mount', () => {
8686
expect(wrapper.html()).to.equal(`<div>foo</div>`)
8787
})
8888

89-
it('throws an error when it fails to mount', () => {
89+
it('throws an error when the component fails to mount', () => {
9090
expect(() => mount({
91-
template: '<div></div>',
92-
mounted: function() {
93-
throw(new Error('Error'))
94-
}
95-
})).to.throw();
96-
97-
})
91+
template: '<div></div>',
92+
mounted: function () {
93+
throw (new Error('Error'))
94+
}
95+
})).to.throw()
96+
})
9897
})

test/unit/specs/shallow.spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,13 @@ describe('shallow', () => {
7474
shallow(ComponentWithNestedChildren)
7575
expect(info.called).to.equal(false)
7676
})
77+
78+
it('throws an error when the component fails to mount', () => {
79+
expect(() => shallow({
80+
template: '<div></div>',
81+
mounted: function () {
82+
throw (new Error('Error'))
83+
}
84+
})).to.throw()
85+
})
7786
})

0 commit comments

Comments
 (0)