当前位置: 首页 > 知识库问答 >
问题:

名为“某物”的路由不存在“vue路由器控制台”。使用vue测试utils时发出警告

汲雅珺
2023-03-14

我正在为vue编写测试代码。js组件,使用vue路由器,使用vue测试utils。

下面是与此相关的代码。

const Routes = [{
  ...
 }, ...
 {
  ...,
  path: '/transfers',
  name: 'transfers',
  redirect: '/transfers/all',
  ...
 },...]

Routes.ts

export default class Transfers extends Vue {
  ...
  @Watch('$route', { immediate: true })
  async setDataResource (value: any) {
    const routeParams = value.params
    const paramKey: string = Object.keys(routeParams)[0]
    ...
  }
}

转移。vue

import { shallowMount, createLocalVue } from '@vue/test-utils'
import VueRouter from 'vue-router'
import Routes from '../../router/Routes'

const localVue = createLocalVue()
localVue.use(VueRouter)
...
const router = new VueRouter({ Routes })

...
describe('Elements', () => {
  const div = document.createElement('div')
  div.id = 'root'
  document.body.appendChild(div)

  router.push({ name: 'transfers', params: { processing: 'all' } })

  const wrapper = shallowMount(Transfers, {
    localVue,
    store,
    router,
    attachTo: '#root'
  })
  ...
})

转移。测验js

我想做的是用params在$route上测试手表。

它与'params:{处理:'all'}'配合得很好,但是

console.warn
      [vue-router] Route with name 'transfers' does not exist

出现。

我会用路由器。推入({name:'transfers'})。vue,因此我认为该名称通常注册到routes。但仅用于测试,似乎找不到名为“传输”的路由。

路线。ts文件最初并没有为路由使用名称选项,但我添加了它,因为我只能使用名称选项将参数推送到路由器。我的意思是,我们的项目不需要名称选项!

所以我的问题是,

  • 有没有办法在测试代码中将参数推送到路由器,而不在路由中使用name选项
  • 如果我应该使用name选项,为什么这个警告只在测试时出现

共有1个答案

谭浩皛
2023-03-14

在上一个项目中,我做了很多测试。我总是嘲笑我的$路由和$路由器(参见代码片段)。我已经创建了一个我正在测试的页面的代码(包括整个文件)。它显示了我的基本设置和我测试路由对象的一些方法。即

let mocks = {
  $route: {
    path: '/some-path',
    query: {
      amount: null,
      loanType: null
    }
  },
  $router: [],
  $validator: {
    validateAll: jest.fn()
  },
  $toast: {
    show: jest.fn(),
    error: jest.fn()
  },
  $withProcessing: jest.fn()
}

要准确诊断您的问题而不跳进代码有点困难,但我希望您能从下面得到一些帮助。

https://codepen.io/RuNpiXelruN/pen/XWRKmoE

 类似资料:
  • 官方路由 对于大多数单页面应用,都推荐使用官方支持的vue-router库。更多细节可以看vue-router文档。 从零开始简单的路由 如果只需要非常简单的路由而不需要引入整个路由库,可以动态渲染一个页面级的组件像这样: const NotFound = { template: '<p>Page not found</p>' } const Home = { template: '<p>home

  • > 还有第二个警告:/src/main.js中的警告导出默认值(作为Vue导入)在vue中找不到。 它向我展示了一个空白站点,路由器可能出了问题,这是我应用程序的脚本。vue(对此不确定): 从“@/router”导入路由器导出默认值{} 这是我的index.js: main.js:

  • 推荐直接使用官方 vue-router,VUX部分组件支持link属性直接支持vue-router的路由参数,vux2模板内置了vue-router。 如果使用了过渡(转场动画),在iPhone上使用左划返回时动画会再执行一遍,目前没有找到可行的处理方法,如果你有处理方案,欢迎PR。 https://github.com/airyland/vux/pull/2259

  • 由于以下错误(npm 3.10.10,webpack 3.8.1),我无法使用vue routes get。如何解决这个问题 编译失败。 ./node_modules/babel loader/lib/node_modules/vue loader/lib/selector.js?type=script 我使用简单的网页包 Quotes.vue Quote.vue new-quote.vue Ap

  • 我有以下Vuex商店(main.js): 我还为Vue路由器(routes.js)定义了以下路由: 我试图这样做,如果Vuex存储了对象,并且将属性设置为,则路由器会将用户重定向到登录页面。 我有这个: 问题是,我不知道如何从函数内部访问Vuex商店的对象。 我知道我可以在组件中使用来设置路由器保护逻辑,但这会使每个组件变得杂乱无章。我想在路由器级别集中定义它。

  • 本文向大家介绍vue-router 控制路由权限的实现,包括了vue-router 控制路由权限的实现的使用技巧和注意事项,需要的朋友参考一下 注意:vue-router是无法完全控制前端路由权限。 1、实现思路 使用vue-router实例函数addRoutes动态添加路由规则,不多废话直接上思维导图: 2、实现步骤 2.1、路由匹配判断 通过vue-router前置守卫beforeEach中参