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.
API
O método mount()
Argumentos:
{Component} component
{Object} options
Retorna:
{Wrapper}
Opções:
Consulte as opções
- Uso:
Cria um Wrapper
(envolvedor) que contém o componente Vue montado e renderizado.
Sem as opções:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo)
expect(wrapper.contains('div')).toBe(true)
})
})
Com as opções do Vue:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo, {
propsData: {
color: 'red'
}
})
expect(wrapper.props().color).toBe('red')
})
})
Ligar ao DOM:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const div = document.createElement('div')
document.body.appendChild(div)
const wrapper = mount(Foo, {
attachTo: div
})
expect(wrapper.contains('div')).toBe(true)
wrapper.destroy()
})
})
Encaixes padrão e nomeados:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import FooBar from './FooBar.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo, {
slots: {
default: [Bar, FooBar],
fooBar: FooBar, // Corresponderá a `<slot name="FooBar" />`.
foo: '<div />'
}
})
expect(wrapper.contains('div')).toBe(true)
})
})
Forjando propriedades globais:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const $route = { path: 'http://www.example-path.com' }
const wrapper = mount(Foo, {
mocks: {
$route
}
})
expect(wrapper.vm.$route.path).toBe($route.path)
})
})
Forjando componentes:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import Faz from './Faz.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo, {
stubs: {
BarFoo: true,
FooBar: Faz,
Bar: { template: '<div class="stubbed" />' }
}
})
expect(wrapper.contains('.stubbed')).toBe(true)
expect(wrapper.contains(Bar)).toBe(true)
})
})
Nota de Depreciação:
Quando você estiver forjando componentes, o fornecimento de uma string (ComponentToStub: '<div class="stubbed" />
) já não é suportado.
- Consulte também: Wrapper (envolvedor)
O método shallowMount()
Argumentos:
{Component} component
{Object} options
{HTMLElement|string} string
{boolean} attachToDocument
{Object} context
{Array<Component|Object>|Component} children
{Object} slots
{Array<Component|Object>|Component|String} default
{Array<Component|Object>|Component|String} named
{Object} mocks
{Object|Array<string>} stubs
{Vue} localVue
Retorna:
{Wrapper}
Opções:
Consulte as opções
- Uso:
Tal como o mount
, ele cria um Wrapper
(envolvedor) que contém o componente Vue montado e renderizado, mas com componentes filhos forjados.
Sem as opções:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = shallowMount(Foo)
expect(wrapper.contains('div')).toBe(true)
})
})
Com as opções do Vue:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = shallowMount(Foo, {
propsData: {
color: 'red'
}
})
expect(wrapper.props().color).toBe('red')
})
})
Ligar ao DOM:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const div = document.createElement('div')
document.body.appendChild(div)
const wrapper = shallowMount(Foo, {
attachTo: div
})
expect(wrapper.contains('div')).toBe(true)
wrapper.destroy()
})
})
Encaixes padrão e nomeados:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import FooBar from './FooBar.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = shallowMount(Foo, {
slots: {
default: [Bar, FooBar],
fooBar: FooBar, // Corresponderá a <slot name="FooBar" />,
foo: '<div />'
}
})
expect(wrapper.contains('div')).toBe(true)
})
})
Forjando propriedades globais:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const $route = { path: 'http://www.example-path.com' }
const wrapper = shallowMount(Foo, {
mocks: {
$route
}
})
expect(wrapper.vm.$route.path).toBe($route.path)
})
})
O método render()
Argumentos:
{Component} component
{Object} options
{Object} context
{Array<Component|Object>|Component} children
{Object} slots
{Array<Component|Object>|Component|String} default
{Array<Component|Object>|Component|String} named
{Object} mocks
{Object|Array<string>} stubs
{Vue} localVue
Retorna:
{Promise<CheerioWrapper>}
Opções:
Consulte as opções
- Uso:
Transforma um objeto em uma string e retorna um cheerio wrapper (envolvedor).
Cheerio é uma biblioteca parecida com o JQuery para atravessar o DOM dentro do Node.js. Ela tem uma API semelhante ao Wrapper
(envolvedor) da Vue Test Utils.
O render
usa vue-server-renderer
nos bastidores, para transformar um componente em HTML estático.
O render
está incluído dentro do pacote @vue/server-test-utils
.
Sem as opções:
import { render } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const wrapper = await render(Foo)
expect(wrapper.text()).toContain('<div></div>')
})
})
Com as opções do Vue:
import { render } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const wrapper = await render(Foo, {
propsData: {
color: 'red'
}
})
expect(wrapper.text()).toContain('red')
})
})
Encaixes padrão e nomeados:
import { render } from '@vue/server-test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import FooBar from './FooBar.vue'
describe('Foo', () => {
it('renders a div', async () => {
const wrapper = await render(Foo, {
slots: {
default: [Bar, FooBar],
fooBar: FooBar, // Corresponderá a <slot name="FooBar" />,
foo: '<div />'
}
})
expect(wrapper.text()).toContain('<div></div>')
})
})
Forjando propriedades globais:
import { render } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const $route = { path: 'http://www.example-path.com' }
const wrapper = await render(Foo, {
mocks: {
$route
}
})
expect(wrapper.text()).toContain($route.path)
})
})
O método renderToString()
Argumentos:
{Component} component
{Object} options
{Object} context
{Array<Component|Object>|Component} children
{Object} slots
{Array<Component|Object>|Component|String} default
{Array<Component|Object>|Component|String} named
{Object} mocks
{Object|Array<string>} stubs
{Vue} localVue
Retorna:
{Promise<string>}
Opções:
Consulte as opções
- Uso:
Transforma um componente em HTML.
O renderToString
usa o vue-server-renderer
nos bastidores, para transformar um componente em HTML.
O renderToString
está incluído dentro do pacote @vue/server-test-utils
.
Sem as opções:
import { renderToString } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const str = await renderToString(Foo)
expect(str).toContain('<div></div>')
})
})
Com as opções do Vue:
import { renderToString } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const str = await renderToString(Foo, {
propsData: {
color: 'red'
}
})
expect(str).toContain('red')
})
})
Encaixes padrão e nomeados:
import { renderToString } from '@vue/server-test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import FooBar from './FooBar.vue'
describe('Foo', () => {
it('renders a div', async () => {
const str = await renderToString(Foo, {
slots: {
default: [Bar, FooBar],
fooBar: FooBar, // Corresponderá a <slot name="FooBar" />,
foo: '<div />'
}
})
expect(str).toContain('<div></div>')
})
})
Forjando propriedades globais:
import { renderToString } from '@vue/server-test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', async () => {
const $route = { path: 'http://www.example-path.com' }
const str = await renderToString(Foo, {
mocks: {
$route
}
})
expect(str).toContain($route.path)
})
})
Os seletores
Há muitos métodos que recebem um seletor como um argumento. Um seletor pode ser tanto um seletor CSS, um componente do Vue, ou um método find
de objeto.
Seletores CSS
O mount manipula qualquer seletor css válido:
- seletores de tags (
div
,foo
,bar
) - seletores de classe (
.foo
,.bar
) - seletores de atributos (
[foo]
,[foo="bar"]
) - seletores de id (
#foo
,#bar
) - pseudo-seletores (
div:first-of-type
)
You can also use combinators: Você também pode usar combinações:
- combinador de descendente direto (
div > #bar > .foo
) - combinador de descendente genérico (
div #bar .foo
) - seletor de irmão adjacente (
div + .foo
) - seletor de irmão genérico (
div ~ .foo
)
Componentes do Vue
Os componentes do Vue também são seletores válidos.
// Foo.vue
export default {
name: 'FooComponent'
}
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
const wrapper = shallowMount(Foo)
expect(wrapper.is(Foo)).toBe(true)
Find
de Objeto
Método Name (nome)
Ao usar um método find
de objeto, o Vue Test Utils permite a seleção de elementos pelo name
do componente no wrapper (envolvedor) de componentes.
const buttonWrapper = wrapper.find({ name: 'my-button' })
buttonWrapper.trigger('click')
Ref (referência)
Ao usar um método find
de objeto, o Vue Test Utils permite a seleção de elementos pelo $ref
no wrapper (envolvedor) de componentes.
const buttonWrapper = wrapper.find({ ref: 'myButton' })
buttonWrapper.trigger('click')
O método createLocalVue()
Argumentos:
{Object} options
{Function} errorHandler
Retorna:
{Component}
Uso:
O createLocalVue
retorna uma classe do Vue para você adicionar componentes, mixins (combinadores) e instalar plugins sem poluir a classe global do Vue.
A opção errorHandler
pode ser usada para manipular erros não capturados durante a função de renderizar do componente e observadores.
Use ele com options.localVue
:
Sem as opções:
import { createLocalVue, shallowMount } from '@vue/test-utils'
import MyPlugin from 'my-plugin'
import Foo from './Foo.vue'
const localVue = createLocalVue()
localVue.use(MyPlugin)
const wrapper = shallowMount(Foo, {
localVue,
mocks: { foo: true }
})
expect(wrapper.vm.foo).toBe(true)
const freshWrapper = shallowMount(Foo)
expect(freshWrapper.vm.foo).toBe(false)
Com a opção errorHandler
:
import { createLocalVue, shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
const errorHandler = (err, vm, info) => {
expect(err).toBeInstanceOf(Error)
}
const localVue = createLocalVue({
errorHandler
})
// Foo lança um erro dentro um gatilho do ciclo de vida
const wrapper = shallowMount(Foo, {
localVue
})
- Consulte também: Dicas Comuns
O método createWrapper(node [, options])
Argumentos:
{vm|HTMLElement} node
{Object} options
{Boolean} attachedToDocument
Retorna:
{Wrapper}
Uso:
O createWrapper
cria um Wrapper
para uma instância do Vue montada, ou um elemento HTML.
import { createWrapper } from '@vue/test-utils'
import Foo from './Foo.vue'
const Constructor = Vue.extend(Foo)
const vm = new Constructor().$mount()
const wrapper = createWrapper(vm)
expect(wrapper.vm.foo).toBe(true)
Configuração
A Vue Test Utils incluem um objeto de configuração para as opções definidas usadas pela Vue Test Utils.
Opções de Configuração da Vue Test Utils
showDeprecationWarnings
- tipo:
Boolean
- valor padrão:
true
Controla se ou não mostrar avisos de depreciação. Quando definida para true
, todos avisos de depreciação são visíveis na consola.
Exemplo:
import { config } from '@vue/test-utils'
config.showDeprecationWarnings = false
deprecationWarningHandler
- tipo:
Function
Permite controle delicado sobre os avisos de depreciação. Quando showDeprecationWarnings
é definido para true
, todos avisos de depreciação serão passados para este manipulador com o nome do método como primeiro argumento e a mensagem original como segundo argumento.
TIP
Isto poderia ser útil para registar mensagens de depreciação para separar a localização ou ajudar numa atualização gradual de base de código para última versão do utilitários de teste pela ignorância de certas funções de avisos depreciadas
Exemplo:
import { config } from '@vue/test-utils'
config.showDeprecationWarnings = true
config.deprecationWarningHandler = (method, message) => {
if (method === 'emittedByOrder') return
console.error(message)
}
stubs
- tipo:
{ [name: string]: Component | boolean | string }
- valor padrão:
{}
O forjado guardado dentro de config.stubs
é usado por padrão.
Forjados para usar dentro de componentes. Estes são sobrescritos pelo stubs
passado dentro das opções em montagem.
Quando estiver passando stubs
como um arranjo dentro de opções em montagem, os config.stubs
são convertidos para um arranjo, e forjarão componentes com um componente básico que retornam <${component name}-stub>
.
Exemplo:
import { config } from '@vue/test-utils'
config.stubs['my-component'] = '<div />'
mocks
- tipo:
Object
- valor padrão:
{}
Tal como nos stubs
, os valores passados para o config.mocks
são usados por padrão. Quaisquer valores passados para as opções de montagem do objeto mocks
terão prioridade sobre aqueles declarados dentro de config.mocks
.
Exemplo:
import { config } from '@vue/test-utils'
config.mocks['$store'] = {
state: {
id: 1
}
}
methods
- tipo:
{ [name: string]: Function }
- valor padrão:
{}
Você pode configurar métodos padrão usando o objeto config
. Isto podem ser útil para plugins que injetam métodos aos componentes, tal como o VeeValidate. Você pode sobrescrever métodos definidos dentro de config
ao passar os methods
dentro das opções em montagem.
Exemplo:
import { config } from '@vue/test-utils'
config.methods['getData'] = () => {}
provide
- tipo:
Object
- valor padrão:
{}
Tal como em stubs
ou mocks
, os valores passados para o config.provide
são usados por padrão. Quaisquer valores passados para opções em montagem do objeto provide
terão prioridade sobre aqueles declarados dentro de config.provide
. Por favor repare que isto não é suportado para passar uma função como config.provide
.
Exemplo:
import { config } from '@vue/test-utils'
config.provide['$logger'] = {
log: (...args) => {
console.log(...args)
}
}
O método enableAutoDestroy(hook)
Argumentos:
{Function} hook
Uso:
O método enableAutoDestroy
destruirá todas as instâncias de Wrapper
(envolvedor) usando a função gatilho passada (por exemplo o afterEach
). Depois de chamar o método, você pode reverter para o comportamento padrão ao chamar o método resetAutoDestroyState
.
import { enableAutoDestroy, mount } from '@vue/test-utils'
import Foo from './Foo.vue'
// chama wrapper.destroy() depois de cada teste
enableAutoDestroy(afterEach)
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo)
expect(wrapper.contains('div')).toBe(true)
// não há necessidade de chamar wrapper.destroy() aqui
})
})
A função resetAutoDestroyState
- Uso:
Depois de chamar enableAutoDestroy
você pode precisar desativar o comportamento de autodestruição (por exemplo quando algum do seu conjunto de testes depender do wrapper (envolvedor) ser persistente através de testes separados)
Para alcançar isso você pode chamar resetAutoDestroyState
para desativar o gatilho registado anteriormente
import {
enableAutoDestroy,
resetAutoDestroyState,
mount
} from '@vue/test-utils'
import Foo from './Foo.vue'
// chama wrapper.destroy() depois de cada teste
enableAutoDestroy(afterEach)
// redefine a autodestruição depois do conjunto terminar
afterAll(resetAutoDestroyState)
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo)
expect(wrapper.contains('div')).toBe(true)
// não há necessidade de chamar wrapper.destroy() aqui
})
})