【问题标题】:Snapshot Testing with Vue-Router使用 Vue-Router 进行快照测试
【发布时间】:2018-08-01 16:42:46
【问题描述】:

我正在尝试在使用 Vue-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 的文档,我可以删除路由器链接,但这并没有通过我的快照测试。有没有人遇到过这个问题?

【问题讨论】:

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


    【解决方案1】:

    更新:更一致的解决方案

    tl;博士:

    我发现始终有效的解决方案是创建一个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
      }
    })
    

    该解决方案在大多数情况下都有效。如果您需要使用mount 并且您的router-link 不在被测试的组件中,而是在它下面的组件中,您仍然会收到该警告。现在,如果您处于这种情况,那么值得反思一下您是否正确编写了测试(您是测试太多而不是一个小单元吗?),但是我有一两种情况,如果我使用shallow 而不是@ 987654330@,快照测试毫无价值,因为它将孩子呈现为&lt;!----&gt; when I callexpect(wrapper.html()).toMatchSnapshot()`。

    快照测试注意事项: 我实际上还没有看到有人使用Wrapper.html() 方法进行快照测试的例子,但它确实似乎是我实验中最好的解决方案。 vue-server-renderer 似乎是相同的结果。访问Wrappervm 属性使您可以访问$el 属性,没有太多麻烦,但这只是html() 的更多空白渲染。

    【讨论】:

    • 是的,它并不完美,&lt;a/&gt; 标签不是我想要的,但它比stubs: ['router-link'] 或简单地在全球范围内注释掉console.warn 更好的解决方案。谢谢!
    • 我用更好的解决方案和更好的解释更新了我的答案。我还想指出,您不需要&lt;a&gt; 标签,只需将tag="button" 或其他任何内容添加到router-link 声明中即可。
    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2021-07-13
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多