vant/src/share-sheet/test/index.spec.ts
2021-02-11 13:04:00 +08:00

107 lines
2.7 KiB
TypeScript

import ShareSheet from '..';
import { mount, trigger, later } from '../../../test';
test('should render cancel text when using cancel-text prop', async () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
cancelText: 'foo',
},
});
expect(wrapper.find('.van-share-sheet__cancel').html()).toMatchSnapshot();
await wrapper.setProps({ cancelText: '' });
expect(wrapper.find('.van-share-sheet__cancel').exists()).toBeFalsy();
});
test('should render description when using description prop', async () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
description: 'foo',
},
});
expect(
wrapper.find('.van-share-sheet__description').html()
).toMatchSnapshot();
await wrapper.setProps({ description: '' });
expect(wrapper.find('.van-share-sheet__description').exists()).toBeFalsy();
});
test('should allow to custom the className of option', () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
options: [{ name: 'Link', icon: 'link', className: 'foo' }],
},
});
const option = wrapper.find('.van-share-sheet__option').element;
expect(option.className.includes('foo')).toBeTruthy();
});
test('should emit select event when an option is clicked', () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
options: [{ icon: 'wechat', name: 'wechat' }],
},
});
wrapper.find('.van-share-sheet__option').trigger('click');
expect(wrapper.emitted('select')[0]).toEqual([
{ icon: 'wechat', name: 'wechat' },
0,
]);
});
test('should emit cancel event when the cancel button is clicked', () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
},
});
wrapper.find('.van-share-sheet__cancel').trigger('click');
expect(wrapper.emitted('update:show')[0][0]).toEqual(false);
expect(wrapper.emitted('cancel')[0]).toBeTruthy();
});
test('should render title and description slot correctly', () => {
const wrapper = mount(ShareSheet, {
props: {
show: true,
},
slots: {
title: () => 'Custom Title',
description: () => 'Custom Description',
},
});
expect(wrapper.html()).toMatchSnapshot();
});
test('should emit click-overlay event when overlay is clicked', async () => {
const root = document.createElement('div');
const onClickOverlay = jest.fn();
const wrapper = mount(ShareSheet, {
props: {
show: true,
teleport: root,
onClickOverlay,
},
});
await later();
const overlay = root.querySelector('.van-overlay');
trigger(overlay, 'click');
expect(onClickOverlay).toHaveBeenCalledTimes(1);
expect(wrapper.emitted('update:show')[0][0]).toEqual(false);
});