mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-05 19:41:42 +08:00
113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
import Vue from 'vue';
|
|
import ImagePreview from '..';
|
|
import ImagePreviewVue from '../ImagePreview';
|
|
import {
|
|
mount,
|
|
trigger,
|
|
triggerDrag,
|
|
transitionStub
|
|
} from '../../../test/utils';
|
|
|
|
transitionStub();
|
|
|
|
function triggerZoom(el, x, y) {
|
|
trigger(el, 'touchstart', 0, 0, { x, y });
|
|
trigger(el, 'touchmove', -x / 4, -y / 4, { x, y });
|
|
trigger(el, 'touchmove', -x / 3, -y / 3, { x, y });
|
|
trigger(el, 'touchmove', -x / 2, -y / 2, { x, y });
|
|
trigger(el, 'touchmove', -x, -y, { x, y });
|
|
trigger(el, 'touchend', 0, 0, { touchList: [] });
|
|
}
|
|
|
|
const images = [
|
|
'https://img.yzcdn.cn/1.png',
|
|
'https://img.yzcdn.cn/2.png',
|
|
'https://img.yzcdn.cn/3.png'
|
|
];
|
|
|
|
test('render image', () => {
|
|
const wrapper = mount(ImagePreviewVue, {
|
|
propsData: { images, value: true }
|
|
});
|
|
|
|
expect(wrapper).toMatchSnapshot();
|
|
|
|
const swipe = wrapper.find('.van-swipe__track');
|
|
triggerDrag(swipe, 500, 0);
|
|
expect(wrapper.emitted('input')).toBeFalsy();
|
|
triggerDrag(swipe, 0, 0);
|
|
expect(wrapper.emitted('input')[0][0]).toBeFalsy();
|
|
});
|
|
|
|
test('async close', () => {
|
|
const wrapper = mount(ImagePreviewVue, {
|
|
propsData: {
|
|
images,
|
|
value: true,
|
|
asyncClose: true
|
|
}
|
|
});
|
|
|
|
const swipe = wrapper.find('.van-swipe__track');
|
|
triggerDrag(swipe, 0, 0);
|
|
expect(wrapper.emitted('input')).toBeFalsy();
|
|
wrapper.vm.close();
|
|
expect(wrapper.emitted('input')[0][0]).toBeFalsy();
|
|
});
|
|
|
|
test('function call', done => {
|
|
ImagePreview(images);
|
|
ImagePreview(images.slice(0, 1));
|
|
Vue.nextTick(() => {
|
|
const wrapper = document.querySelector('.van-image-preview');
|
|
const swipe = wrapper.querySelector('.van-swipe__track');
|
|
triggerDrag(swipe, 0, 0);
|
|
|
|
expect(wrapper.querySelectorAll('img').length).toEqual(1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('function call options', done => {
|
|
const onClose = jest.fn();
|
|
const instance = ImagePreview({
|
|
images,
|
|
startPostion: 1,
|
|
onClose
|
|
});
|
|
|
|
instance.$emit('input', true);
|
|
expect(onClose.mock.calls.length).toEqual(0);
|
|
|
|
Vue.nextTick(() => {
|
|
const wrapper = document.querySelector('.van-image-preview');
|
|
const swipe = wrapper.querySelector('.van-swipe__track');
|
|
triggerDrag(swipe, 0, 0);
|
|
expect(onClose.mock.calls.length).toEqual(1);
|
|
expect(onClose.mock.calls).toEqual([
|
|
[{ index: 0, url: 'https://img.yzcdn.cn/1.png' }]
|
|
]);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('register component', () => {
|
|
Vue.use(ImagePreview);
|
|
expect(Vue.component(ImagePreviewVue.name)).toBeTruthy();
|
|
});
|
|
|
|
test('zoom', async () => {
|
|
const { getBoundingClientRect } = Element.prototype;
|
|
Element.prototype.getBoundingClientRect = jest.fn(() => ({ width: 100 }));
|
|
|
|
const wrapper = mount(ImagePreviewVue, {
|
|
propsData: { images, value: true }
|
|
});
|
|
|
|
const image = wrapper.find('img');
|
|
triggerZoom(image, 300, 300);
|
|
triggerDrag(image, 300, 300);
|
|
expect(wrapper).toMatchSnapshot();
|
|
Element.prototype.getBoundingClientRect = getBoundingClientRect;
|
|
});
|