Javascript 无法在vue测试utils中使用$route设置模拟
我试着练习测试引用。这是我的密码 NestedRoute.vueJavascript 无法在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
<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做任何事情。在这个上下文中不需要它