vant/src/pull-refresh/test/index.spec.js
2020-01-19 11:57:09 +08:00

169 lines
3.6 KiB
JavaScript

import PullRefresh from '..';
import { mount, later, trigger, triggerDrag } from '../../../test';
test('change head content when pulling down', async () => {
const wrapper = mount(PullRefresh, {
propsData: {
value: false,
},
listeners: {
input(value) {
wrapper.setProps({ value });
},
},
});
const track = wrapper.find('.van-pull-refresh__track');
// pulling
trigger(track, 'touchstart', 0, 0);
trigger(track, 'touchmove', 0, 20);
expect(wrapper).toMatchSnapshot();
// loosing
trigger(track, 'touchmove', 0, 100);
expect(wrapper).toMatchSnapshot();
// loading
trigger(track, 'touchend', 0, 100);
expect(wrapper).toMatchSnapshot();
// still loading
triggerDrag(track, 0, 100);
expect(wrapper).toMatchSnapshot();
expect(wrapper.emitted('input')).toBeTruthy();
expect(wrapper.emitted('refresh')).toBeFalsy();
await later();
expect(wrapper.emitted('refresh')).toBeTruthy();
// end loading
wrapper.vm.value = false;
expect(wrapper).toMatchSnapshot();
});
test('custom content by slots', async () => {
const wrapper = mount(PullRefresh, {
scopedSlots: {
pulling({ distance }) {
return `pulling ${distance}`;
},
loosing({ distance }) {
return `loosing ${distance}`;
},
loading({ distance }) {
return `loading ${distance}`;
},
},
});
const track = wrapper.find('.van-pull-refresh__track');
// pulling
trigger(track, 'touchstart', 0, 0);
trigger(track, 'touchmove', 0, 20);
expect(wrapper).toMatchSnapshot();
// loosing
trigger(track, 'touchmove', 0, 75);
trigger(track, 'touchmove', 0, 100);
expect(wrapper).toMatchSnapshot();
// loading
trigger(track, 'touchend', 0, 100);
expect(wrapper).toMatchSnapshot();
});
test('pull a short distance', () => {
const wrapper = mount(PullRefresh, {
propsData: {
value: false,
},
});
const track = wrapper.find('.van-pull-refresh__track');
triggerDrag(track, 0, 10);
expect(wrapper.emitted('input')).toBeFalsy();
});
test('not in page top', () => {
const wrapper = mount(PullRefresh, {
propsData: {
value: false,
},
});
window.scrollTop = 100;
const track = wrapper.find('.van-pull-refresh__track');
// ignore touch event when not at page top
triggerDrag(track, 0, 100);
window.scrollTop = 0;
trigger(track, 'touchmove', 0, 100);
expect(wrapper).toMatchSnapshot();
});
test('render success text', async () => {
const wrapper = mount(PullRefresh, {
propsData: {
successText: 'success',
successDuration: 0,
},
listeners: {
input(value) {
wrapper.setProps({ value });
},
},
});
const track = wrapper.find('.van-pull-refresh__track');
triggerDrag(track, 0, 100);
await later();
// loading
expect(wrapper.vm.value).toBeTruthy();
wrapper.setProps({ value: false });
// success
expect(wrapper).toMatchSnapshot();
// normal
await later();
expect(wrapper).toMatchSnapshot();
});
test('render success slot', async () => {
const wrapper = mount(PullRefresh, {
scopedSlots: {
success: () => 'Custom Success',
},
listeners: {
input(value) {
wrapper.setProps({ value });
},
},
});
const track = wrapper.find('.van-pull-refresh__track');
triggerDrag(track, 0, 100);
await later();
expect(wrapper.vm.value).toBeTruthy();
wrapper.setProps({ value: false });
expect(wrapper).toMatchSnapshot();
});
test('should set height when using head-height', async () => {
const wrapper = mount(PullRefresh, {
propsData: {
headHeight: 100,
},
});
expect(wrapper).toMatchSnapshot();
});