Вы делаете что-то, что случается с работой, но я считаю, что это неправильно, а также вызывает проблемы с тестированием маршрутизатора.Вы импортируете маршрутизатор в свой компонент:
import router from "@/router";
Затем сразу вызываете его push
:
router.push("/home");
Я не знаю, как именно вы устанавливаете маршрутизатор, но обычно вы делаете что-то вроде:
new Vue({
router,
store,
i18n,
}).$mount('#app');
Для установки плагинов Vue.Могу поспорить, что вы уже делаете это (на самом деле, это механизм, который выставляет $route
для вашего компонента).В этом примере также устанавливается хранилище vuex и ссылка на vue-i18n.
В результате будет открыт элемент $router
в всех ваших компонентов .Вместо того, чтобы импортировать маршрутизатор и напрямую вызывать его push
, вы можете вызвать его с this
как $router
:
this.$router.push("/home");
Теперь это упрощает тестирование, поскольку вы можете передать поддельный маршрутизаторваш компонент при тестировании через свойство mocks
, как вы уже делаете с $route
:
const push = jest.fn();
const $router = {
push: jest.fn(),
}
...
mocks: {
$route,
$router,
}
А затем, в своем тесте, вы утверждаете, что push
был вызван:
expect(push).toHaveBeenCalledWith('/the-desired-path');