mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[Test] optimize async cases (#1232)
This commit is contained in:
parent
25bd67e8f1
commit
74aa001bb6
@ -1,12 +1,12 @@
|
|||||||
/* eslint-disable camelcase */
|
/* eslint-disable camelcase */
|
||||||
import Vue from 'vue';
|
import { mount } from '@vue/test-utils';
|
||||||
import { mount, TransitionStub } from '@vue/test-utils';
|
|
||||||
import { renderToString } from '@vue/server-test-utils';
|
import { renderToString } from '@vue/server-test-utils';
|
||||||
import AddressEdit from '../';
|
import AddressEdit from '../';
|
||||||
import AddressDetail from '../Detail';
|
import AddressDetail from '../Detail';
|
||||||
import areaList from '../../area/demo/area.simple';
|
import areaList from '../../area/demo/area.simple';
|
||||||
|
import { later, transitionStub } from '../../../test/utils';
|
||||||
|
|
||||||
Vue.component('transition', TransitionStub);
|
transitionStub();
|
||||||
|
|
||||||
const addressInfo = {
|
const addressInfo = {
|
||||||
name: '测试',
|
name: '测试',
|
||||||
@ -207,7 +207,7 @@ test('watch address info', () => {
|
|||||||
expect(wrapper.vm.data.name).toEqual('123');
|
expect(wrapper.vm.data.name).toEqual('123');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('set/get area code', done => {
|
test('set/get area code', async() => {
|
||||||
const wrapper = mount(AddressEdit, {
|
const wrapper = mount(AddressEdit, {
|
||||||
propsData: { areaList }
|
propsData: { areaList }
|
||||||
});
|
});
|
||||||
@ -219,7 +219,8 @@ test('set/get area code', done => {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
wrapper.vm.setAreaCode('110101');
|
wrapper.vm.setAreaCode('110101');
|
||||||
setTimeout(() => {
|
|
||||||
|
await later(50);
|
||||||
expect(wrapper.vm.data.area_code).toEqual('110101');
|
expect(wrapper.vm.data.area_code).toEqual('110101');
|
||||||
expect(wrapper.vm.getArea()).toEqual([
|
expect(wrapper.vm.getArea()).toEqual([
|
||||||
{ code: '110000', name: '北京市' },
|
{ code: '110000', name: '北京市' },
|
||||||
@ -230,11 +231,9 @@ test('set/get area code', done => {
|
|||||||
wrapper.vm.$refs = [];
|
wrapper.vm.$refs = [];
|
||||||
wrapper.vm.setAreaCode('110102');
|
wrapper.vm.setAreaCode('110102');
|
||||||
expect(wrapper.vm.getArea()).toEqual([]);
|
expect(wrapper.vm.getArea()).toEqual([]);
|
||||||
done();
|
|
||||||
}, 50);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('watch area code', done => {
|
test('watch area code', async() => {
|
||||||
const wrapper = mount(AddressEdit, {
|
const wrapper = mount(AddressEdit, {
|
||||||
propsData: {
|
propsData: {
|
||||||
addressInfo: {
|
addressInfo: {
|
||||||
@ -246,13 +245,11 @@ test('watch area code', done => {
|
|||||||
expect(wrapper.vm.data.city).toEqual('');
|
expect(wrapper.vm.data.city).toEqual('');
|
||||||
wrapper.vm.areaList = areaList;
|
wrapper.vm.areaList = areaList;
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(50);
|
||||||
expect(wrapper.vm.data.city).toEqual('北京市');
|
expect(wrapper.vm.data.city).toEqual('北京市');
|
||||||
done();
|
|
||||||
}, 50);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('show search result', done => {
|
test('show search result', async() => {
|
||||||
const wrapper = mount(AddressEdit, {
|
const wrapper = mount(AddressEdit, {
|
||||||
propsData: {
|
propsData: {
|
||||||
showSearchResult: true,
|
showSearchResult: true,
|
||||||
@ -277,12 +274,11 @@ test('show search result', done => {
|
|||||||
expect(input.value).toEqual('address2');
|
expect(input.value).toEqual('address2');
|
||||||
|
|
||||||
field.trigger('blur');
|
field.trigger('blur');
|
||||||
setTimeout(() => {
|
await later(150);
|
||||||
done();
|
expect(wrapper.vm.detailFocused).toBeFalsy();
|
||||||
}, 150);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('delete address', done => {
|
test('delete address', async() => {
|
||||||
const wrapper = mount(AddressEdit, {
|
const wrapper = mount(AddressEdit, {
|
||||||
attachToDocument: true,
|
attachToDocument: true,
|
||||||
propsData: {
|
propsData: {
|
||||||
@ -298,9 +294,7 @@ test('delete address', done => {
|
|||||||
deleteButton.trigger('click');
|
deleteButton.trigger('click');
|
||||||
document.querySelector('.van-dialog__confirm').click();
|
document.querySelector('.van-dialog__confirm').click();
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('delete')).toBeTruthy();
|
expect(wrapper.emitted('delete')).toBeTruthy();
|
||||||
expect(wrapper.emitted('cancel-delete')).toBeTruthy();
|
expect(wrapper.emitted('cancel-delete')).toBeTruthy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -2,6 +2,7 @@ import ContactCard from '..';
|
|||||||
import ContactList from '../../contact-list';
|
import ContactList from '../../contact-list';
|
||||||
import ContactEdit from '../../contact-edit';
|
import ContactEdit from '../../contact-edit';
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
|
import { later } from '../../../test/utils';
|
||||||
|
|
||||||
const contactInfo = {
|
const contactInfo = {
|
||||||
name: 'test',
|
name: 'test',
|
||||||
@ -93,7 +94,7 @@ describe('ContactEdit', () => {
|
|||||||
expect(wrapper.vm.data.name).toEqual('123');
|
expect(wrapper.vm.data.name).toEqual('123');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('delete contact', done => {
|
test('delete contact', async() => {
|
||||||
const wrapper = mount(ContactEdit, {
|
const wrapper = mount(ContactEdit, {
|
||||||
propsData: {
|
propsData: {
|
||||||
isEdit: true
|
isEdit: true
|
||||||
@ -104,9 +105,7 @@ describe('ContactEdit', () => {
|
|||||||
deleteButton.trigger('click');
|
deleteButton.trigger('click');
|
||||||
document.querySelector('.van-dialog__confirm').click();
|
document.querySelector('.van-dialog__confirm').click();
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('delete')).toBeTruthy();
|
expect(wrapper.emitted('delete')).toBeTruthy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Field from '../';
|
import Field from '../';
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
|
import { later } from '../../../test/utils';
|
||||||
|
|
||||||
test('input event', () => {
|
test('input event', () => {
|
||||||
const wrapper = mount(Field);
|
const wrapper = mount(Field);
|
||||||
@ -55,17 +56,16 @@ test('keypress event', () => {
|
|||||||
expect(calls.length).toBe(2);
|
expect(calls.length).toBe(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('render textarea', done => {
|
test('render textarea', async() => {
|
||||||
const wrapper = mount(Field, {
|
const wrapper = mount(Field, {
|
||||||
propsData: {
|
propsData: {
|
||||||
type: 'textarea',
|
type: 'textarea',
|
||||||
autosize: true
|
autosize: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
|
||||||
|
await later();
|
||||||
expect(wrapper).toMatchSnapshot();
|
expect(wrapper).toMatchSnapshot();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('autosize textarea field', () => {
|
test('autosize textarea field', () => {
|
||||||
@ -83,7 +83,7 @@ test('autosize textarea field', () => {
|
|||||||
expect(textarea.element.value).toEqual(value);
|
expect(textarea.element.value).toEqual(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('autosize object', done => {
|
test('autosize object', async() => {
|
||||||
const wrapper = mount(Field, {
|
const wrapper = mount(Field, {
|
||||||
propsData: {
|
propsData: {
|
||||||
type: 'textarea',
|
type: 'textarea',
|
||||||
@ -95,8 +95,7 @@ test('autosize object', done => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const textarea = wrapper.find('.van-field__control');
|
const textarea = wrapper.find('.van-field__control');
|
||||||
setTimeout(() => {
|
|
||||||
|
await later();
|
||||||
expect(textarea.element.style.height).toEqual(('50px'));
|
expect(textarea.element.style.height).toEqual(('50px'));
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -43,5 +43,5 @@ test('function call', (done) => {
|
|||||||
|
|
||||||
test('register component', () => {
|
test('register component', () => {
|
||||||
Vue.use(ImagePreview);
|
Vue.use(ImagePreview);
|
||||||
expect(Vue.component('van-image-preview')).toBeTruthy();
|
expect(Vue.component(ImagePreviewVue.name)).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
@ -1,63 +1,57 @@
|
|||||||
import List from '..';
|
import List from '..';
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
|
import { later } from '../../../test/utils';
|
||||||
|
|
||||||
test('load event', done => {
|
test('load event', async() => {
|
||||||
const wrapper = mount(List);
|
const wrapper = mount(List);
|
||||||
|
|
||||||
wrapper.vm.$on('input', value => {
|
wrapper.vm.$on('input', value => {
|
||||||
wrapper.vm.loading = value;
|
wrapper.vm.loading = value;
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('load')).toBeTruthy();
|
expect(wrapper.emitted('load')).toBeTruthy();
|
||||||
expect(wrapper.emitted('input')).toBeTruthy();
|
expect(wrapper.emitted('input')).toBeTruthy();
|
||||||
|
|
||||||
wrapper.vm.loading = false;
|
wrapper.vm.loading = false;
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('input')[1]).toBeTruthy();
|
expect(wrapper.emitted('input')[1]).toBeTruthy();
|
||||||
wrapper.destroy();
|
wrapper.destroy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('finished', done => {
|
test('finished', async() => {
|
||||||
const wrapper = mount(List, {
|
const wrapper = mount(List, {
|
||||||
propsData: {
|
propsData: {
|
||||||
finished: true
|
finished: true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('load')).toBeFalsy();
|
expect(wrapper.emitted('load')).toBeFalsy();
|
||||||
expect(wrapper.emitted('input')).toBeFalsy();
|
expect(wrapper.emitted('input')).toBeFalsy();
|
||||||
wrapper.vm.finished = false;
|
wrapper.vm.finished = false;
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('load')).toBeTruthy();
|
expect(wrapper.emitted('load')).toBeTruthy();
|
||||||
expect(wrapper.emitted('input')).toBeTruthy();
|
expect(wrapper.emitted('input')).toBeTruthy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('immediate check false', done => {
|
test('immediate check false', async() => {
|
||||||
const wrapper = mount(List, {
|
const wrapper = mount(List, {
|
||||||
propsData: {
|
propsData: {
|
||||||
immediateCheck: false
|
immediateCheck: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('load')).toBeFalsy();
|
expect(wrapper.emitted('load')).toBeFalsy();
|
||||||
expect(wrapper.emitted('input')).toBeFalsy();
|
expect(wrapper.emitted('input')).toBeFalsy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('keey-alive live cycle', () => {
|
test('keey-alive live cycle', () => {
|
||||||
const wrapper = mount({
|
const wrapper = mount(
|
||||||
|
{
|
||||||
template: `
|
template: `
|
||||||
<keep-alive>
|
<keep-alive>
|
||||||
<list v-if="show" />
|
<list v-if="show" />
|
||||||
@ -65,11 +59,13 @@ test('keey-alive live cycle', () => {
|
|||||||
`,
|
`,
|
||||||
props: ['show'],
|
props: ['show'],
|
||||||
components: { List }
|
components: { List }
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
propsData: {
|
propsData: {
|
||||||
show: true
|
show: true
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
expect(wrapper.vm.$el).toBeTruthy();
|
expect(wrapper.vm.$el).toBeTruthy();
|
||||||
wrapper.vm.show = false;
|
wrapper.vm.show = false;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Swipe from '..';
|
import Swipe from '..';
|
||||||
import SwipeItem from '../../swipe-item';
|
import SwipeItem from '../../swipe-item';
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
import { triggerDrag } from '../../../test/utils';
|
import { triggerDrag, later } from '../../../test/utils';
|
||||||
|
|
||||||
const Component = {
|
const Component = {
|
||||||
template: `
|
template: `
|
||||||
@ -44,7 +44,7 @@ const Component = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
test('autoplay', done => {
|
test('autoplay', async() => {
|
||||||
const wrapper = mount(Component, {
|
const wrapper = mount(Component, {
|
||||||
propsData: {
|
propsData: {
|
||||||
autoplay: 20
|
autoplay: 20
|
||||||
@ -52,32 +52,26 @@ test('autoplay', done => {
|
|||||||
});
|
});
|
||||||
const { swipe } = wrapper.vm.$refs;
|
const { swipe } = wrapper.vm.$refs;
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(60);
|
||||||
expect(swipe.active).toEqual(1);
|
expect(swipe.active).toEqual(1);
|
||||||
wrapper.setData({ autoplay: 0 });
|
wrapper.setData({ autoplay: 0 });
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(60);
|
||||||
expect(swipe.active).toEqual(1);
|
expect(swipe.active).toEqual(1);
|
||||||
wrapper.setData({ autoplay: 20 });
|
wrapper.setData({ autoplay: 20 });
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(60);
|
||||||
expect(swipe.active).toEqual(2);
|
expect(swipe.active).toEqual(2);
|
||||||
wrapper.destroy();
|
wrapper.destroy();
|
||||||
done();
|
|
||||||
}, 60);
|
|
||||||
}, 60);
|
|
||||||
}, 60);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('swipeTo', done => {
|
test('swipeTo', async() => {
|
||||||
const wrapper = mount(Component);
|
const wrapper = mount(Component);
|
||||||
const { swipe } = wrapper.vm.$refs;
|
const { swipe } = wrapper.vm.$refs;
|
||||||
swipe.swipeTo(2);
|
swipe.swipeTo(2);
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(30);
|
||||||
expect(swipe.active).toEqual(2);
|
expect(swipe.active).toEqual(2);
|
||||||
done();
|
|
||||||
}, 30);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('initial swipe', () => {
|
test('initial swipe', () => {
|
||||||
|
@ -1,34 +1,30 @@
|
|||||||
import Toast from '../';
|
import Toast from '../';
|
||||||
import Vue from 'vue';
|
import { transitionStub, later } from '../../../test/utils';
|
||||||
import { TransitionStub } from '@vue/test-utils';
|
|
||||||
|
|
||||||
Vue.component('transition', TransitionStub);
|
transitionStub();
|
||||||
|
|
||||||
test('create a forbidClick toast', done => {
|
test('create a forbidClick toast', async() => {
|
||||||
const toast = Toast({
|
const toast = Toast({
|
||||||
forbidClick: true
|
forbidClick: true
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(toast.$el.outerHTML).toMatchSnapshot();
|
expect(toast.$el.outerHTML).toMatchSnapshot();
|
||||||
setTimeout(() => {
|
|
||||||
|
await later();
|
||||||
expect(document.body.classList.contains('van-toast--unclickable')).toBeTruthy();
|
expect(document.body.classList.contains('van-toast--unclickable')).toBeTruthy();
|
||||||
toast.forbidClick = false;
|
toast.forbidClick = false;
|
||||||
setTimeout(() => {
|
|
||||||
|
await later();
|
||||||
expect(document.body.classList.contains('van-toast--unclickable')).toBeFalsy();
|
expect(document.body.classList.contains('van-toast--unclickable')).toBeFalsy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('toast disappeared after duration', (done) => {
|
it('toast disappeared after duration', async() => {
|
||||||
const toast = Toast({
|
const toast = Toast({
|
||||||
duration: 10
|
duration: 10
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(50);
|
||||||
expect(toast.$el.style.display).toEqual('none');
|
expect(toast.$el.style.display).toEqual('none');
|
||||||
done();
|
|
||||||
}, 50);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('clear toast', () => {
|
test('clear toast', () => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Uploader from '..';
|
import Uploader from '..';
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
|
import { later } from '../../../test/utils';
|
||||||
|
|
||||||
window.File = function() {
|
window.File = function() {
|
||||||
this.size = 10000;
|
this.size = 10000;
|
||||||
@ -72,7 +73,7 @@ it('before read return false', () => {
|
|||||||
expect(afterRead.mock.calls.length).toBeFalsy();
|
expect(afterRead.mock.calls.length).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('file size overlimit', done => {
|
test('file size overlimit', async() => {
|
||||||
const wrapper = mount(Uploader, {
|
const wrapper = mount(Uploader, {
|
||||||
propsData: {
|
propsData: {
|
||||||
maxSize: 1
|
maxSize: 1
|
||||||
@ -81,15 +82,13 @@ test('file size overlimit', done => {
|
|||||||
wrapper.vm.onChange(file);
|
wrapper.vm.onChange(file);
|
||||||
wrapper.vm.onChange(multiFile);
|
wrapper.vm.onChange(multiFile);
|
||||||
|
|
||||||
setTimeout(() => {
|
await later();
|
||||||
expect(wrapper.emitted('oversize')[0]).toBeTruthy();
|
expect(wrapper.emitted('oversize')[0]).toBeTruthy();
|
||||||
expect(wrapper.emitted('oversize')[1]).toBeTruthy();
|
expect(wrapper.emitted('oversize')[1]).toBeTruthy();
|
||||||
|
|
||||||
wrapper.vm.maxSize = 100000;
|
wrapper.vm.maxSize = 100000;
|
||||||
wrapper.vm.onChange(multiFile);
|
wrapper.vm.onChange(multiFile);
|
||||||
setTimeout(() => {
|
|
||||||
|
await later();
|
||||||
expect(wrapper.emitted('oversize')[2]).toBeFalsy();
|
expect(wrapper.emitted('oversize')[2]).toBeFalsy();
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import deepClone from '../deep-clone';
|
import deepClone from '../deep-clone';
|
||||||
import { isAndroid, isDef, camelize, get } from '..';
|
import { isAndroid, isDef, camelize, get } from '..';
|
||||||
import { raf, cancel } from '../raf';
|
import { raf, cancel } from '../raf';
|
||||||
|
import { later } from '../../../test/utils';
|
||||||
|
|
||||||
test('deepClone', () => {
|
test('deepClone', () => {
|
||||||
const a = { foo: 0 };
|
const a = { foo: 0 };
|
||||||
@ -43,13 +44,11 @@ test('isAndroid', () => {
|
|||||||
expect(isAndroid()).toBeFalsy();
|
expect(isAndroid()).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('raf', (done) => {
|
test('raf', async() => {
|
||||||
const spy = jest.fn();
|
const spy = jest.fn();
|
||||||
raf(spy);
|
raf(spy);
|
||||||
|
|
||||||
setTimeout(() => {
|
await later(50);
|
||||||
expect(spy.mock.calls.length).toBe(1);
|
expect(spy.mock.calls.length).toBe(1);
|
||||||
cancel(1);
|
cancel(1);
|
||||||
done();
|
|
||||||
}, 50);
|
|
||||||
});
|
});
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import Vue from 'vue';
|
||||||
|
import { TransitionStub } from '@vue/test-utils';
|
||||||
|
|
||||||
// Trigger pointer/touch event
|
// Trigger pointer/touch event
|
||||||
export function trigger(wrapper, eventName, x = 0, y = 0) {
|
export function trigger(wrapper, eventName, x = 0, y = 0) {
|
||||||
const el = wrapper.element ? wrapper.element : wrapper;
|
const el = wrapper.element ? wrapper.element : wrapper;
|
||||||
@ -34,3 +37,14 @@ export function triggerDrag(el, x = 0, y = 0) {
|
|||||||
trigger(el, 'touchmove', x, y);
|
trigger(el, 'touchmove', x, y);
|
||||||
trigger(el, 'touchend', x, y);
|
trigger(el, 'touchend', x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// promisify setTimeout
|
||||||
|
export function later(delay) {
|
||||||
|
return new Promise(function(resolve) {
|
||||||
|
setTimeout(resolve, delay);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function transitionStub() {
|
||||||
|
Vue.component('transition', TransitionStub);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user