在 vue.js 测试中模拟路由器时避免 vue 警告
Avoid vue warnings when mocking router in vue.js tests
我正在测试一个 Vue.js 2 应用程序,它使用 Axios 进行 HTTP 请求,我正在使用 Moxios 模拟这些请求。测试也使用 Avoriaz。
我正在测试的页面仅呈现元素列表并显示一些使用 <router-link>
实现的按钮
问题是我在测试中收到了很多
风格的警告
ERROR LOG: '[Vue warn]: Unknown custom element: <router-link> - did you register the component correctly?
我要测试的页面如下所示(简化):
<template>
<div>
<ul>
<li v-for="myelement in myobject.myelements">
{{myelement.id}}
</li>
</ul>
<router-link :to="{name: 'myElementCreate'}">New element</router-link>
</div>
</template>
<script>
import myService from './my-service.js'
export default {
name: 'my-list',
data() {
return {
myobject: {
myelements: []
}
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
if (this.$route.params.id) {
myService.get(this.$route.params.id)
.then((response) => {
// init data from response
})
}
}
}
}
</script>
测试看起来像这样:
import Vue from 'vue'
import moxios from 'moxios'
import {shallow} from 'avoriaz'
import MyElements from '@/my-elements'
describe('My Elements', () => {
beforeEach(() => {
moxios.install()
})
afterEach(() => {
moxios.uninstall()
})
it('Renders elements list', (done) => {
moxios.stubRequest(/.*/, {
status: 200,
response: existingElement
})
// mock route to allow fetchData() to load elements
const component = shallow(MyElements, {
globals: {
$route: {params: {'id': 1}}
}
})
moxios.wait(() => {
Vue.nextTick(() => {
try {
const myElement = component.find('ul li')
expect(myElement[0].text()).to.equal('6035132')
} catch (e) {
done(e)
}
done()
})
})
})
})
const existingElement = {
'id': 6035132
}
如果我添加 Vue.use(Router)
和相应的导入,警告就会消失,但我的 Moxios 模拟将不再起作用。知道如何摆脱这些警告吗?
问题是 router-link 没有注册为组件。
如果不安装Vue Router,则router-link组件未注册。这意味着它不能在您的组件中使用。
要解决此问题,您可以注册存根路由器-link 组件:
// mock component
Vue.component('router-link', {
name: 'router-link',
render: h => h('div')
})
const component = shallow(MyElements, {
globals: {
$route: {params: {'id': 1}}
}
})
我正在测试一个 Vue.js 2 应用程序,它使用 Axios 进行 HTTP 请求,我正在使用 Moxios 模拟这些请求。测试也使用 Avoriaz。
我正在测试的页面仅呈现元素列表并显示一些使用 <router-link>
问题是我在测试中收到了很多
风格的警告ERROR LOG: '[Vue warn]: Unknown custom element: <router-link> - did you register the component correctly?
我要测试的页面如下所示(简化):
<template>
<div>
<ul>
<li v-for="myelement in myobject.myelements">
{{myelement.id}}
</li>
</ul>
<router-link :to="{name: 'myElementCreate'}">New element</router-link>
</div>
</template>
<script>
import myService from './my-service.js'
export default {
name: 'my-list',
data() {
return {
myobject: {
myelements: []
}
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
if (this.$route.params.id) {
myService.get(this.$route.params.id)
.then((response) => {
// init data from response
})
}
}
}
}
</script>
测试看起来像这样:
import Vue from 'vue'
import moxios from 'moxios'
import {shallow} from 'avoriaz'
import MyElements from '@/my-elements'
describe('My Elements', () => {
beforeEach(() => {
moxios.install()
})
afterEach(() => {
moxios.uninstall()
})
it('Renders elements list', (done) => {
moxios.stubRequest(/.*/, {
status: 200,
response: existingElement
})
// mock route to allow fetchData() to load elements
const component = shallow(MyElements, {
globals: {
$route: {params: {'id': 1}}
}
})
moxios.wait(() => {
Vue.nextTick(() => {
try {
const myElement = component.find('ul li')
expect(myElement[0].text()).to.equal('6035132')
} catch (e) {
done(e)
}
done()
})
})
})
})
const existingElement = {
'id': 6035132
}
如果我添加 Vue.use(Router)
和相应的导入,警告就会消失,但我的 Moxios 模拟将不再起作用。知道如何摆脱这些警告吗?
问题是 router-link 没有注册为组件。
如果不安装Vue Router,则router-link组件未注册。这意味着它不能在您的组件中使用。
要解决此问题,您可以注册存根路由器-link 组件:
// mock component
Vue.component('router-link', {
name: 'router-link',
render: h => h('div')
})
const component = shallow(MyElements, {
globals: {
$route: {params: {'id': 1}}
}
})