Vuejs2 用Vue路由器进行快照测试
我正在尝试在使用Vue cli应用程序创建的Vue应用程序中运行jest快照测试。当我测试一个有路由器链接的组件时,我收到以下警告Vuejs2 用Vue路由器进行快照测试,vuejs2,vue-router,jestjs,vue-test-utils,Vuejs2,Vue Router,Jestjs,Vue Test Utils,我正在尝试在使用Vue cli应用程序创建的Vue应用程序中运行jest快照测试。当我测试一个有路由器链接的组件时,我收到以下警告 [Vue warn]: Unknown custom element: <router-link> - did you register the component correctly? For recursive components, make sure to provide the "name" option. [Vue warn]:未
[Vue warn]: Unknown custom element: <router-link> - did you register
the component correctly? For recursive components, make sure to
provide the "name" option.
[Vue warn]:未知自定义元素:-您注册了吗
组件是否正确安装?对于递归组件,请确保
提供“名称”选项。
按照这里的文档,我可以删除路由器链接,但这不能通过快照测试。以前有人遇到过这个问题吗?更新:更一致的解决方案 tl;博士: 我发现一致有效的解决方案是创建一个
localVue
(通常不在descripe()
块的范围内),并将RoutherLinkStub
添加为一个组件
import { mount, RouterLinkStub, createLocalVue } from '@vue/test-utils';
const localVue = createLocalVue();
localVue.component('router-link', RouterLinkStub);
const wrapper = mount(Component, { localVue });
文档并没有使解决方案变得明显,因为它似乎是您链接到的页面与此页面的混合体
从该页:
import { mount, RouterLinkStub } from '@vue/test-utils'
const wrapper = mount(Component, {
stubs: {
RouterLink: RouterLinkStub
}
})
这种解决方案在大多数情况下都有效。如果您需要使用挂载
,并且路由器链接
不是在被测试的组件中,而是在其下方,您仍然会收到该警告。现在,如果您处于这种情况,那么如果您正确地编写了测试(您是否测试了太多而不是一个小单元?),这是值得考虑的,但是我有一两种情况,如果我shallow
而不是mount
,那么快照测试毫无价值,因为当我调用expect(wrapper.html())时,它将子项呈现为.toMatchSnapshot()`
关于快照测试的说明:
实际上,我还没有看到人们使用Wrapper.html()
方法进行快照测试的例子,但这似乎是我实验中最好的解决方案<代码>vue服务器渲染器
对于看起来相同的结果来说是一个漫长的过程。访问Wrapper
的vm
属性可以让您轻松地访问$el
属性,但这只是html()
的一个更为空白的呈现 是的,它并不完美,
标记不是我想要的,但它比存根:['router-link']
或简单地注释控制台。全局警告要好得多。谢谢我用更好的解决方案和更好的解释更新了我的答案。我还想指出的是,您不需要
标记,只需将tag=“button”
或任何内容添加到路由器链接
声明中即可。