Я создал простой компонент 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, который выдает ошибку в обработчике жизненного цикла created (), поэтому я могу проверить 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 выдает ошибку, когда я пытаюсь его смонтировать (что приводит к провалу всего теста). Есть ли способ предотвратить это?
РЕДАКТИРОВАТЬ: то, что я пытаюсь достичь, - это фактически смонтировать компонент ErrorThrowing в слот по умолчанию компонента ErrorBoundary, чтобы проверить, будет ли ErrorBoundary отображать сообщение об ошибке, а не слот. Именно так я и создал ErrorThrowingComponent. Но я не могу утверждать поведение ErrorBoundary, потому что получаю сообщение об ошибке при попытке создать оболочку.
errorCaptured
? Можете ли вы попробовать добавить туда журнал и посмотреть, не связана ли проблема с устройством захвата? - person Aviad   schedule 25.11.2018vue-test-utils
. Похоже, что приvue-test-utils
анализе шаблонов может быть ошибка. Может быть, откроем баг в их репо :) - person Aviad   schedule 25.11.2018