mirror of
https://github.com/youzan/vant.git
synced 2025-10-22 11:54:02 +00:00
190 lines
4.5 KiB
TypeScript
190 lines
4.5 KiB
TypeScript
import Slider from '..';
|
|
import {
|
|
mount,
|
|
trigger,
|
|
triggerDrag,
|
|
mockGetBoundingClientRect,
|
|
} from '../../../test';
|
|
|
|
function mockRect(vertical?: boolean) {
|
|
return mockGetBoundingClientRect({
|
|
width: vertical ? 0 : 100,
|
|
height: vertical ? 100 : 0,
|
|
top: vertical ? 0 : 100,
|
|
left: vertical ? 100 : 0,
|
|
});
|
|
}
|
|
|
|
test('should emit "update:modelValue" event after dragging button', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
triggerDrag(button, 50, 0);
|
|
expect(wrapper.emitted('update:modelValue')!.pop()).toEqual([100]);
|
|
});
|
|
|
|
test('should emit "update:modelValue" event after clicking slider', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
trigger(wrapper, 'click', 100, 0);
|
|
expect(wrapper.emitted('update:modelValue')!.pop()).toEqual([100]);
|
|
});
|
|
|
|
test('should emit drag-start event when start dragging', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
trigger(button, 'touchstart');
|
|
trigger(button, 'touchmove');
|
|
expect(wrapper.emitted('drag-start')).toBeTruthy();
|
|
});
|
|
|
|
test('should emit drag-end event when end dragging', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
trigger(button, 'touchstart');
|
|
trigger(button, 'touchmove');
|
|
expect(wrapper.emitted('drag-end')).toBeFalsy();
|
|
trigger(button, 'touchend');
|
|
expect(wrapper.emitted('drag-end')).toBeTruthy();
|
|
});
|
|
|
|
test('should not allow to drag slider when disabled', async () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
disabled: true,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
triggerDrag(button, 50, 0);
|
|
expect(wrapper.emitted('update:modelValue')).toBeFalsy();
|
|
});
|
|
|
|
test('should not allow to click slider when disabled', async () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
disabled: true,
|
|
},
|
|
});
|
|
|
|
trigger(wrapper, 'click', 100, 0);
|
|
expect(wrapper.emitted('update:modelValue')).toBeFalsy();
|
|
});
|
|
|
|
test('should not allow to drag slider when readonly', async () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
readonly: true,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
triggerDrag(button, 50, 0);
|
|
expect(wrapper.emitted('update:modelValue')).toBeFalsy();
|
|
});
|
|
|
|
test('should not allow to click slider when readonly', async () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
readonly: true,
|
|
},
|
|
});
|
|
|
|
trigger(wrapper, 'click', 100, 0);
|
|
expect(wrapper.emitted('update:modelValue')).toBeFalsy();
|
|
});
|
|
|
|
test('should allow to drag vertical slider', () => {
|
|
const restoreMock = mockRect(true);
|
|
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
vertical: true,
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
triggerDrag(button, 0, 50);
|
|
expect(wrapper.emitted('update:modelValue')!.pop()).toEqual([100]);
|
|
|
|
restoreMock();
|
|
});
|
|
|
|
test('should change slider bar height when using bar-height prop', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
barHeight: 10,
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
expect(wrapper.style.height).toEqual('10px');
|
|
});
|
|
|
|
test('shoud change button size when using button-size prop', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
buttonSize: 10,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
expect(button.style.width).toEqual('10px');
|
|
expect(button.style.height).toEqual('10px');
|
|
});
|
|
|
|
test('should emit "update:modelValue" event after clicking vertical slider', () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
vertical: true,
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
trigger(wrapper, 'click', 0, 100);
|
|
expect(wrapper.emitted('update:modelValue')!.pop()).toEqual([100]);
|
|
});
|
|
|
|
test('should not emit change event when value not changed', async () => {
|
|
const wrapper = mount(Slider, {
|
|
props: {
|
|
modelValue: 50,
|
|
},
|
|
});
|
|
|
|
const button = wrapper.find('.van-slider__button');
|
|
trigger(button, 'touchstart');
|
|
trigger(wrapper, 'click', 100, 0);
|
|
expect(wrapper.emitted('change')!.length).toEqual(1);
|
|
|
|
await wrapper.setProps({ modelValue: 100 });
|
|
trigger(button, 'touchstart');
|
|
trigger(wrapper, 'click', 100, 0);
|
|
|
|
expect(wrapper.emitted('change')!.length).toEqual(1);
|
|
});
|