У меня есть компонент Vue. js, который показывает баннер BootstrapVue в ответ на ошибку отправки. Во время ручного тестирования все работает нормально, но соответствующий модульный тест не проходит.
Ошибка следующая.
[vue-test-utils]: find did not return #submit-failure-banner, cannot call isVisible() on empty Wrapper
36 |
37 | const errorBanner = wrapper.find("#submit-failure-banner")
> 38 | expect(errorBanner.isVisible()).toBeTruthy()
| ^
39 | })
40 | })
41 |
it("shows an error message on post failure", async () => {
const wrapper = mount(NewSite, {
localVue,
provide: {
sites: new Sites(internalServerErrorRequestHandler)
}
});
const siteOwnerInput = wrapper.find('#new-site-owner-input');
siteOwnerInput.setValue(owner);
const saveButton = wrapper.find('#new-site-save');
saveButton.trigger('click');
await wrapper.vm.$nextTick();
const errorBanner = wrapper.find("#submit-failure-banner")
expect(errorBanner.isVisible()).toBeTruthy()
})
Соответствующие части компонента NewSite
следующие , начиная с элемента баннера в шаблоне.
<b-alert id="submit-failure-banner" variant="danger" v-model="banners.submitFailure" dismissible>
{{ $t('$MESSAGE_SITE_SAVE_FAILED') }}
</b-alert>
export default class NewSite extends Vue {
@Inject('sites') private sites!: Sites
form = {
owner: ''
}
banners = {
submitFailure: false,
...
}
async postForm() {
return await this.sites.create({
owner: this.form.owner,
state: SiteStatus.NEW
}).save()
}
...
async onSave() {
if (!this.checkForm()) {
return;
}
try {
await this.postForm();
await this.$router.push({name: 'dashboard'})
} catch (_) {
this.banners.submitFailure = true;
}
}
Соответствующая часть класса Sites
выполняет не что иное, как запрос POST с использованием обработчика запросов. Это axios
в производстве и фиктивный обработчик запросов во время тестов. internalServerErrorRequestHandler
определяется следующим образом.
const internalServerErrorRequestHandler = {
post(url: string, data: any): Promise<Response> {
return Promise.reject()
}
}
Я проверил, что html не показывает баннер, с помощью оператора console.log
.