我目前一直在开玩笑地对vue组件的路由行为进行单元测试。离开组件时,Vue-router的“ beforeRouteLeave”导航保护会运行一些逻辑。在生产环境中运行的应用程序中会调用此守护程序,但是在我尝试对其进行测试时不会调用它。
我使用jest作为测试框架,并使用vue-test-utils挂载组件并使用vue-router设置本地Vue实例。
在这里您可以找到一个最小的工作示例(在src / components / HelloWorld.spec中进行测试):
https://codesandbox.io/s/72536ojvp6?module=%2Fsrc%2Fcomponents%2FHelloWorld.spec.js
为什么不调用路由器挂钩,如何使它工作? 预先感谢!
答案 0 :(得分:0)
对我来说,以下代码可以很好地测试vue路由器导航防护。
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);