Vuejs2 用Vue路由器进行快照测试

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 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]:未知自定义元素:-您注册了吗
组件是否正确安装?对于递归组件,请确保
提供“名称”选项。

按照这里的文档,我可以删除路由器链接,但这不能通过快照测试。以前有人遇到过这个问题吗?

更新:更一致的解决方案

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”
或任何内容添加到
路由器链接
声明中即可。