【发布时间】:2019-08-05 01:23:13
【问题描述】:
我正在尝试练习引用Using a Mock Router 的测试。这是我的代码。
NestedRoute.vue
<template>
<div>
<div>Nested Route</div>
<div class="username">
{{ $route.params.username }}
</div>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
router.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
})
test.spec.js
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]: could not overwrite property $route, this is usually caused by a plugin that has added the property as a read-only value。
我尝试引用a issue 'Cannot use mocks with localVue',但我无法解决我的问题。如何使用模拟来使用$route
【问题讨论】:
-
只需删除
localVue.use(VueRouter);,一切都会正常。如果你模拟它,你不必包含它;) -
@ThomasKleßen 谢谢你的回答!但是当我这样做时,
the same error is thrown和测试结果是Expected: "tom", Received: ""
标签: javascript unit-testing vue.js