使用Vue-Router进行快照测试

时间:2018-02-21 23:16:24

标签: vuejs2 vue-router jest vue-test-utils

我尝试在使用V​​ue-cli应用创建的Vue应用中运行jest-snapshot测试。当我测试其中包含路由器链接的组件时,我收到以下警告。

 [Vue warn]: Unknown custom element: <router-link> - did you register 
 the component correctly? For recursive components, make sure to 
 provide the "name" option.

按照此处的文档Unit tests with View Router我可以删除路由器链接,但这并没有通过我的快照测试。有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:2)

更新:更一致的解决方案

TL; DR:

我发现一致的工作方法是创建localVue(通常在describe()块的范围之外)并添加RoutherLinkStub作为组件。

import { mount, RouterLinkStub, createLocalVue } from '@vue/test-utils';

const localVue = createLocalVue();
localVue.component('router-link', RouterLinkStub);

const wrapper = mount(Component, { localVue });

文档并没有使解决方案显而易见,因为它似乎是您链接到的页面和关于RouterLinkStub的页面的混合。

从该页面开始:

import { mount, RouterLinkStub } from '@vue/test-utils'

const wrapper = mount(Component, {
  stubs: {
    RouterLink: RouterLinkStub
  }
})

该解决方案适用于大多数情况。如果您遇到需要使用mountrouter-link不在正在测试的组件但位于其下方的组件的情况下,您仍会收到该警告。现在,如果你处于这种情况,如果你正确地编写你的测试,你是否值得反思(你测试的是太多而不是一个小单位吗?),但我有一两种情况,如果我shallow而不是mount,快照测试毫无价值,因为它将子项呈现为<!----> when I call期望(wrapper.html())。toMatchSnapshot()`。

关于快照测试的说明: 我还没有看到人们使用Wrapper.html()方法进行快照测试的例子,但它似乎是我实验中最好的解决方案。 vue-server-renderer是一个漫长的步行,似乎是相同的结果。通过访问vm Wrapper属性,您可以轻松访问$el属性,但这只是html()的空白繁重渲染。