首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vue-Test-Utils未知自定义元素:<路由器-链接>

Vue-Test-Utils未知自定义元素:<路由器-链接>
EN

Stack Overflow用户
提问于 2018-04-05 21:08:14
回答 4查看 17.4K关注 0票数 40

我使用Jest使用vue-test-utils库运行我的测试。

尽管我已经将VueRouter添加到localVue实例中,但它说它实际上找不到路由器链接组件。如果代码看起来有点古怪,那是因为我使用的是TypeScript,但是它应该读得非常接近ES6.主要是@Prop()与传入道具相同:{..}

Vue组件:

代码语言:javascript
复制
<template>
  <div>
    <div class="temp">
      <div>
        <router-link :to="temp.url">{{temp.name}}</router-link>
      </div>
    </div>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
import { Prop } from 'vue-property-decorator'
import { Temp } from './Temp'

@Component({
  name: 'temp'
})
export default class TempComponent extends Vue {
  @Prop() private temp: Temp
}
</script>

<style lang="scss" scoped>
.temp {
  padding-top: 10px;
}
</style>

温度模型:

代码语言:javascript
复制
export class Temp {
  public static Default: Temp = new Temp(-1, '')

  public url: string

  constructor(public id: number, public name: string) {
    this.id = id
    this.name = name
    this.url = '/temp/' + id
  }
}

Jest测试

代码语言:javascript
复制
import { createLocalVue, shallow } from '@vue/test-utils'
import TempComponent from '@/components/Temp.vue'
import { Temp } from '@/components/Temp'
import VueRouter from 'vue-router'

const localVue = createLocalVue()
localVue.use(VueRouter)

describe('Temp.vue Component', () => {
  test('renders a router-link tag with to temp.url', () => {
    const temp = Temp.Default
    temp.url = 'http://some-url.com'

    const wrapper = shallow(TempComponent, {
      propsData: { temp }
    })
    const aWrapper = wrapper.find('router-link')
    expect((aWrapper.attributes() as any).to).toBe(temp.url)
  })
})

我遗漏了什么?测试实际上通过了,它只是抛出警告。实际上,下面是输出:

测试输出:

代码语言:javascript
复制
$ jest --config test/unit/jest.conf.js
 PASS  ClientApp\components\__tests__\temp.spec.ts
  Temp.vue Component
    √ renders a router-link tag with to temp.url (30ms)

  console.error node_modules\vue\dist\vue.runtime.common.js:589
    [Vue warn]: Unknown custom element: <router-link> - did you register the 
component correctly? For recursive components, make sure to provide the 
"name" option.

    (found in <Root>)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        4.677s
Ran all test suites.
Done in 6.94s.

感谢你能给予的任何帮助!

EN

Stack Overflow用户

发布于 2021-10-01 17:21:43

使用Vue 3和Vue Test (v4),您似乎只需将router (从createRouter返回的对象)作为插件添加到mountOptions

代码语言:javascript
复制
import router from "@/router";

const mountOptions = {
  global: {
    plugins: [router],
  },
};

https://next.vue-test-utils.vuejs.org/api/#global

或者更完整的例子:

代码语言:javascript
复制
import router from "@/router";
import Button from "@/components/Button.vue";

const mountOptions = {
  global: {
    mocks: {
      $route: "home",
      $router: {
        push: jest.fn(),
      },
    },
    plugins: [router],
  },
};


it("Renders", () => {
  const wrapper = shallowMount(Button, mountOptions);
  expect(wrapper.get("nav").getComponent({ name: "router-link" })).toExist();
});

注意,在上面的示例中,我使用了一个带有Vue CLI的项目设置。

票数 3
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49681546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档