import { mount, later } from '../../../test';
import ActionSheet from '..';
test('callback events', () => {
const callback = jest.fn();
const onInput = jest.fn();
const onCancel = jest.fn();
const onSelect = jest.fn();
const actions = [
{ name: 'Option', callback },
{ name: 'Option', disabled: true },
{ name: 'Option', loading: true },
{ name: 'Option', subname: 'Subname' },
];
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
actions,
cancelText: 'Cancel',
},
context: {
on: {
input: onInput,
cancel: onCancel,
select: onSelect,
},
},
});
const options = wrapper.findAll('.van-action-sheet__item');
options.at(0).trigger('click');
options.at(1).trigger('click');
wrapper.find('.van-action-sheet__cancel').trigger('click');
expect(callback).toHaveBeenCalled();
expect(onCancel).toHaveBeenCalled();
expect(onInput).toHaveBeenCalledWith(false);
expect(onSelect).toHaveBeenCalledWith(actions[0], 0);
expect(wrapper).toMatchSnapshot();
});
test('click overlay and close', async () => {
const onInput = jest.fn();
const onClickOverlay = jest.fn();
const div = document.createElement('div');
mount({
template: `
`,
components: {
ActionSheet,
},
data() {
return {
getContainer: () => div,
};
},
methods: {
onInput,
onClickOverlay,
},
});
await later();
div.querySelector('.van-overlay').click();
expect(onInput).toHaveBeenCalledWith(false);
expect(onClickOverlay).toHaveBeenCalledTimes(1);
});
test('disable lazy-render', () => {
const wrapper = mount(ActionSheet, {
propsData: {
lazyRender: false,
actions: [{ name: 'Option' }, { name: 'Option' }],
cancelText: 'Cancel',
},
});
expect(wrapper).toMatchSnapshot();
});
test('render title and default slot', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
title: 'Title',
},
scopedSlots: {
default() {
return 'Default';
},
},
});
expect(wrapper).toMatchSnapshot();
});
test('get container', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
getContainer: 'body',
},
});
expect(wrapper.vm.$el.parentNode).toEqual(document.body);
});
test('close-on-click-action prop', () => {
const onInput = jest.fn();
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
actions: [{ name: 'Option' }],
closeOnClickAction: true,
},
context: {
on: {
input: onInput,
},
},
});
const option = wrapper.find('.van-action-sheet__item');
option.trigger('click');
expect(onInput).toHaveBeenCalledWith(false);
});
test('round prop', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
round: true,
actions: [{ name: 'Option' }],
},
});
expect(wrapper).toMatchSnapshot();
});
test('color option', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
actions: [{ name: 'Option', color: 'red' }],
},
});
expect(wrapper).toMatchSnapshot();
});
test('description prop', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
description: 'This is a description',
actions: [{ name: 'Option' }],
},
});
expect(wrapper).toMatchSnapshot();
});
test('close-icon prop', () => {
const wrapper = mount(ActionSheet, {
propsData: {
value: true,
title: 'Title',
closeIcon: 'cross',
},
});
expect(wrapper).toMatchSnapshot();
});