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
mount()
Принимает:
{Component} component{Object} options
Возвращает:
{Wrapper}Опции:
- Использование:
Создаёт Wrapper, который содержит примонтированный и отрендеренный компонент Vue.
Без опций:
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)
})
})
С опциями 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')
})
})
Прикрепление к DOM:
import { mount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('renders a div', () => {
const wrapper = mount(Foo, {
attachToDocument: true
})
expect(wrapper.contains('div')).toBe(true)
})
})
Слот по умолчанию и именованные слоты:
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, // будет соответствовать `<slot name="FooBar" />`
foo: '<div />'
}
})
expect(wrapper.contains('div')).toBe(true)
})
})
Заглушки глобальных свойств:
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)
})
})
Заглушки компонентов:
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: {
Bar: '<div class="stubbed" />',
BarFoo: true,
FooBar: Faz
}
})
expect(wrapper.contains('.stubbed')).toBe(true)
expect(wrapper.contains(Bar)).toBe(true)
})
})
- См. также: Wrapper
shallowMount()
Принимает:
{Component} component{Object} options{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
Возвращает:
{Wrapper}Опции:
- Использование:
Аналогично mount, создаёт Wrapper, который содержит примонтированный и отрендеренный компонент Vue, но с заглушками вместо дочерних компонентов.
Без опций:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('отрендерить div', () => {
const wrapper = shallowMount(Foo)
expect(wrapper.contains('div')).toBe(true)
})
})
С опциями Vue:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('отрендерить div', () => {
const wrapper = shallowMount(Foo, {
propsData: {
color: 'red'
}
})
expect(wrapper.props().color).toBe('red')
})
})
Прикрепление к DOM:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('отрендерить div', () => {
const wrapper = shallowMount(Foo, {
attachToDocument: true
})
expect(wrapper.contains('div')).toBe(true)
})
})
Слот по умолчанию и именованные слоты:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
import Bar from './Bar.vue'
import FooBar from './FooBar.vue'
describe('Foo', () => {
it('отрендерить div', () => {
const wrapper = shallowMount(Foo, {
slots: {
default: [Bar, FooBar],
fooBar: FooBar, // будет соответствовать <slot name="FooBar" />,
foo: '<div />'
}
})
expect(wrapper.contains('div')).toBe(true)
})
})
Заглушки глобальных свойств:
import { shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
describe('Foo', () => {
it('отрендерить div', () => {
const $route = { path: 'http://www.example-path.com' }
const wrapper = shallowMount(Foo, {
mocks: {
$route
}
})
expect(wrapper.vm.$route.path).toBe($route.path)
})
})
render()
Принимает:
{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
Возвращает:
{Promise<CheerioWrapper>}Опции:
См. опции
- Использование:
Рендерит объект в строку и возвращает обёртку cheerio.
Cheerio — библиотека, похожая на jQuery, для навигации по DOM в Node.js. Она имеет аналогичный API в Wrapper Vue Test Utils.
render использует vue-server-renderer под капотом для рендеринга компонента в статический HTML.
render включён в пакет @vue/server-test-utils.
Без опций:
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>')
})
})
С опциями 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')
})
})
Слоты по умолчанию и именованные слоты:
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, // Будет соответствовать <slot name="FooBar" />,
foo: '<div />'
}
})
expect(wrapper.text()).toContain('<div></div>')
})
})
Создание заглушек глобальных свойств:
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)
})
})
renderToString()
Аргументы:
{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
Возвращает:
{Promise<string>}Опции:
См. опции
- Использование:
Рендерит компонент в HTML.
renderToString использует vue-server-renderer под капотом для рендеринга компонента в статический HTML.
renderToString включён в пакет @vue/server-test-utils.
Без опций:
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>')
})
})
С опциями 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')
})
})
С слотами по умолчанию и именованными слотами:
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, // Будет соответствовать <slot name="FooBar" />,
foo: '<div />'
}
})
expect(str).toContain('<div></div>')
})
})
Создание заглушек глобальных свойств:
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)
})
})
Селекторы
Многие методы принимают селектор в качестве аргумента. Селектором может быть CSS селектор, компонент Vue или опция поиска объекта.
CSS-селекторы
Обрабатывают любой допустимый CSS селектор:
- селекторы тегов (
div,foo,bar) - селекторы классов (
.foo,.bar) - селекторы атрибутов (
[foo],[foo="bar"]) - селекторы id (
#foo,#bar) - селекторы псевдо-элементов (
div:first-of-type)
Вы также можете использовать комбинации:
- выбор только непосредственных потомков (
div > #bar > .foo) - выбор элементов, являющихся потомками (
div #bar .foo) - селектор выбора соседа идущего за элементом (
div + .foo) - селектор выбора соседей идущих после элемента (
div ~ .foo)
Компоненты Vue
Компоненты Vue также являются корректными селекторами.
// 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)
Опция поиска объекта
Name
Использование объекта для опции поиска, позволяет Vue Test Utils выбирать элементы по name компонента на компонентах обёртках.
const buttonWrapper = wrapper.find({ name: 'my-button' })
buttonWrapper.trigger('click')
Ref
Использование опции поиска объекта позволяет Vue Test Utils выбирать элементы по $ref на компонентах обёрток.
const buttonWrapper = wrapper.find({ ref: 'myButton' })
buttonWrapper.trigger('click')
createLocalVue()
Аргументы:
{Object} options{Function} errorHandler
Возвращает:
{Component}
Использование:
createLocalVue возвращает класс Vue, чтобы вы могли добавлять компоненты, примеси и устанавливать плагины без загрязнения глобального класса Vue.
Опция errorHandler может использоваться для обработки неперехваченных ошибок во время функции визуализации компонента и наблюдателей.
Используйте вместе с options.localVue:
Без опций:
import { createLocalVue, shallowMount } from '@vue/test-utils'
import Foo from './Foo.vue'
const localVue = createLocalVue()
const wrapper = shallowMount(Foo, {
localVue,
mocks: { foo: true }
})
expect(wrapper.vm.foo).toBe(true)
const freshWrapper = shallowMount(Foo)
expect(freshWrapper.vm.foo).toBe(false)
С опцией 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 выдает ошибку внутри ловушки жизненного цикла
const wrapper = shallowMount(Foo, {
localVue
})
- См. также: Общие советы
Конфигурация
Vue Test Utils включает объект конфигурации для определения опций, используемых Vue Test Utils.
Настройки Vue Test Utils
stubs
- Тип:
{ [name: string]: Component | boolean | string } - По умолчанию:
{}
Заглушки указанные в config.stubs используются по умолчанию.
Заглушки, используемые в компонентах. Они перезаписываются значениями stubs переданными в настройках монтирования.
При передаче stubs в качестве массива в настройках монтирования, config.stubs будет преобразована в массив, и будут создаваться компоненты заглушки с базовым компонентом, который возвращает <${component name}-stub>.
Пример:
import { config } from '@vue/test-utils'
config.stubs['my-component'] = '<div />'
mocks
- Тип:
Object - По умолчанию:
{}
По аналогии с stubs, значения, переданные в config.mocks используются по умолчанию. Любые значения, переданные настройкам монтирования объекта mocks, будут иметь приоритет выше, по сравнению с объявленными в config.mocks.
Пример:
import { config } from '@vue/test-utils'
config.mocks['$store'] = {
state: {
id: 1
}
}
methods
- Тип:
{ [name: string]: Function } - По умолчанию:
{}
Вы можете настроить методы по умолчанию с помощью объекта config. Это может быть полезно для плагинов, которые вводят методы в компоненты, такие как VeeValidate. Вы можете переопределить методы, установленные в config, передав methods в настройках монтирования.
Пример:
import { config } from '@vue/test-utils'
config.methods['getData'] = () => {}
provide
- Тип:
Object - По умолчанию:
{}
Как stubs или mocks, значения, переданные config.provide, используются по умолчанию. Любые значения, переданные настройкам монтирования объекта provide, будут иметь приоритет выше по сравнению с объявленными в config.provide. Обратите внимание, что не поддерживается передача функции в качестве config.provide.
Пример:
import { config } from '@vue/test-utils'
config.provide['$logger'] = {
log: (...args) => {
console.log(...args)
}
}
← Руководства Wrapper →