Тестирование средства навигации beforeRouteLeave в компоненте vue

В настоящее время я застрял на модульном тестировании поведения маршрутизации компонента vue с помощью jest. При выходе из компонента навигационная защита beforeRouteLeave Vue-router запускает некоторую логику. Этот охранник вызывается в моем приложении, работающем в производственной среде, но не вызывается, когда я пытаюсь его протестировать.

Я использую jest в качестве среды тестирования и vue-test-utils для монтирования моего компонента и настройки локального экземпляра Vue с vue-router.

Здесь вы можете найти минимальный рабочий пример (тест в 'src / components / HelloWorld.spec'):

https://codesandbox.io/s/72536ojvp6?module=%2Fsrc%2Fcomponents%2FHelloWorld.spec.js

Почему не вызывается перехватчик маршрутизатора и как заставить его работать? Заранее спасибо!


person mightyI    schedule 17.07.2018    source источник
comment
Попробуйте дождаться wrapper.vm. $ NextTick (). Может, это поможет. Либо это, либо страница не была отрисована маршрутизатором.   -  person Dobromir Hristov    schedule 17.07.2018
comment
@DobromirHristov спасибо за ответ! Пытался дождаться следующего тика, но это не помогло. Я даже смонтировал компонент с помощью sync: false.   -  person mightyI    schedule 17.07.2018
comment
Вы уверены, что компонент визуализируется маршрутизатором? Попробуйте отладить текущий компонент маршрута и имя.   -  person Dobromir Hristov    schedule 17.07.2018


Ответы (1)


Для меня следующий код отлично работал для тестирования средств навигации vue router.

const beforeRouteUpdate = wrapper.vm.$options.beforeRouteUpdate[0];
let nextFun = jest.fn();

// in place wrapper.vm you can send any object you want bcz when we call beforeRouteUpdate it looses this context

beforeRouteUpdate.call(wrapper.vm , "toObj", "fromObj", nextFun); 

beforeRouteEnter route navigation guard github

person PALLAMOLLA SAI    schedule 16.04.2020