Javascript 无法在vue测试utils中使用$route设置模拟

Javascript 无法在vue测试utils中使用$route设置模拟,javascript,unit-testing,vue.js,Javascript,Unit Testing,Vue.js,我试着练习测试引用。这是我的密码 NestedRoute.vue <template> <div> <div>Nested Route</div> <div class="username"> {{ $route.params.username }} </div> </div> </template> <script> export default

我试着练习测试引用。这是我的密码

NestedRoute.vue

<template>
<div>
    <div>Nested Route</div>
    <div class="username">
        {{ $route.params.username }}
    </div>
</div>
</template>

<script>
export default {

}
</script>

<style>

</style>
测试规范js

import Vue from 'vue'
import Router from 'vue-router'

import Home from './views/Home.vue';
import NestedRoute from './views/NestedRoute.vue';

Vue.use(Router)

export const routes = [
  { path: '/', name: 'home', component: Home },
  { path: '/nested-route', name: 'nroute', component: NestedRoute }
];

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
import NestedRoute from '@/views/NestedRoute.vue';
import VueRouter from 'vue-router';
import {routes} from '@/router.js'

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

describe('NestedRoute', () => {
        it('renders a username from query string', () => {
            const username = 'tom';
            const $route = {
                params: { username }
            };

            const wrapper = mount(NestedRoute, {
                mocks: {
                    $route
                }
            });

            expect(wrapper.find('.username').text()).toBe(username);
        });
});
运行测试时,出现错误
[vue test utils]:无法覆盖属性$route,这通常是由于插件在出现只读值时添加了属性造成的

我试图引用,但无法解决我的问题。如何使用模拟来使用
$route

import { mount, createLocalVue } from '@vue/test-utils'
import MyComponent from '.../../MyComponent'

describe('MyComponent', () => {
  let wrapper

  beforeEach(() => {
    const localVue = createLocalVue()
    wrapper = mount(MyComponent, {
      localVue,
      mocks: {
        $route: {
          params: {
            id: 200000
          }
        }
      }
    })
  })

  it('has $route set', () => {

  })
})
这就是我的工作方式

简单但非常重要的区别在于导入
路由
来自
router.js
。在
Router.js
Router
中使用的
routes
是如何在
test.sepc.js
中导入的,它会中断
localVue
的过程,即在测试规范中仅导入全局路由器中使用的路由会污染测试的localVue

所以,移除

import {routes} from '@/router.js'

通过
test.spec.js
可以解决这个问题。

只需删除
localVue.use(VueRouter)一切都应该正常。如果您模拟它,则不必包含它;)@托马斯克伦谢谢你的回答!但是当我这样做时,
会抛出相同的错误
,测试结果是
预期的:“tom”,收到的:“谢谢!我按照你的建议写测试。但还是发生了错误。。。以下是我为此所做的,但没有帮助。。。1.仅为测试制作一个附加组件,该组件未在
router.js
中使用。因为我认为“当组件被引用为路由时,Vue路由器设置
$route
。2.我删除了
localVue
,不要删除localVue。这一点很重要,不要继承连接了路由器的Vue实例!另外:你不必对你的Router.js做任何事情。在这个上下文中不需要它