You’re browsing the documentation for Vue Test Utils for Vue v2.x and earlier.
To read docs for Vue Test Utils for Vue 3, click here.
Usando com o Vue Router
Instalando o Vue Router dentro de testes
Você nunca deve instalar o Vue Router sobre o construtor base de Vue dentro de testes. A instalação de Vue Router adiciona $route e $router como propriedades de apenas leitura sobre o protótipo de Vue.
Para evitar isso, nós podemos criar um localVue, e instalar o Vue Router sobre ele.
import { shallowMount, createLocalVue } from '@vue/test-utils'
import VueRouter from 'vue-router'
const localVue = createLocalVue()
localVue.use(VueRouter)
const router = new VueRouter()
shallowMount(Component, {
localVue,
router
})
Nota: A instalação de Vue Router sobre um
localVuetambém adiciona o$routee$routercomo propriedades de apenas leitura aolocalVue. Isto significa que você não pode usar a opçãomockspara sobrescrever o$routee o$routerquando estiver montando um componente usando umlocalVuecom o Vue Router instalado.
Testando componentes que usam o router-link ou router-view
Quando você instalar o Vue Router, os componentes router-link e router-view são registados. Isto significa que nós podemos usar eles em qualquer lugar dentro da aplicação sem a necessidade de importar eles.
Quando nós executamos os testes, nós precisamos tornar estes componentes de Vue Router disponíveis para o componente que estamos montando. Há dois métodos de fazer isso.
Usando os stubs
import { shallowMount } from '@vue/test-utils'
shallowMount(Component, {
stubs: ['router-link', 'router-view']
})
Instalando o Vue Router com o localVue
import { mount, createLocalVue } from '@vue/test-utils'
import VueRouter from 'vue-router'
const localVue = createLocalVue()
localVue.use(VueRouter)
mount(Component, {
localVue,
router
})
A instância do roteador está disponível para todos componentes filhos, isto é útil para testes de nível de integração.
Imitando o #route e o $router
Algumas vezes você deseja testar aquele componente que faz alguma coisa com parâmetros dos objetos $route e $router. Para fazer isso, você pode passar imitações personalizadas para a instância de Vue.
import { shallowMount } from '@vue/test-utils'
const $route = {
path: '/some/path'
}
const wrapper = shallowMount(Component, {
mocks: {
$route
}
})
wrapper.vm.$route.path // /some/path
Nota: os valores imitados de
$routee$routernão estão disponíveis aos componentes filhos, ou forje estes componentes ou use o métodolocalVue.
Conclusão
A instalação de Vue Router adiciona o $route e o $router como propriedades de apenas leitura sobre o protótipo de Vue.
Isso significa que quaisquer testes futuros que tentar imitar o $route ou o $router falhará.
Para evitar isso, nunca instale o Vue Router globalmente quando você estiver executando os testes; use um localVue como detalhado acima.