Я создал простой компонент ErrorBoundary для своего проекта в Vue.js, и я пытаюсь написать для него модульный тест.Код компонента ниже:
<template>
<div class="overvue-error-boundary">
<slot v-if="!error" />
<div class="error-message" v-else>Something went horribly wrong here.</div>
</div>
</template>
<script>
export default {
data () {
return {
error: false
}
},
errorCaptured (error, vm, info) {
this.error = true;
}
}
</script>
Я создал ErrorThrowingComponent, который выдает ошибку на made () ловушке жизненного цикла, чтобы я мог проверить ErrorBoundary:
const ErrorThrowingComponent = Vue.component('error-throwing-component', {
created() {
throw new Error(`Generic error`);
},
render (h) {
return h('div', 'lorem ipsum')
}
});
describe('when component in slot throws an error', () => {
it('renders div.error-message', () => {
// this is when error is when 'Generic error' is thrown by ErrorThrowingComponent
const wrapper = shallowMount(OvervueErrorBoundary, {
slots: {
default: ErrorThrowingComponent
}});
// below code is not executed
expect(wrapper.contains(ErrorThrowingComponent)).to.be.false;
expect(wrapper.contains('div.error-message')).to.be.true;
});
});
Проблема в том, что ErrorThrowingComponent выдает ошибку, когда я пытаюсь его смонтировать (таким образом, проваливая весь тест).Можно ли как-нибудь предотвратить это?
РЕДАКТИРОВАТЬ: я пытаюсь добиться на самом деле mount компонента ErrorThrowing в слоте по умолчанию ErrorBoundary компонент для подтверждения, если ErrorBoundary будет отображать сообщение об ошибке, а не слот.Именно так я и создал ErrorThrowingComponent.Но я не могу утверждать поведение ErrorBoundary, потому что я получаю ошибку при попытке создать оболочку.