vant/test/specs/popup.spec.js

183 lines
4.3 KiB
JavaScript

import Popup from 'packages/popup';
import { mount } from 'avoriaz';
import { triggerTouch } from '../utils';
describe('Popup', () => {
let wrapper;
afterEach(() => {
wrapper && wrapper.destroy();
});
it('create a popup', () => {
wrapper = mount(Popup, {
propsData: {
position: 'bottom'
}
});
expect(wrapper.hasClass('van-popup')).to.be.true;
expect(wrapper.instance().currentTransition).to.equal('popup-slide-bottom');
});
it('create a show popup', (done) => {
wrapper = mount(Popup, {
propsData: {
value: false,
zIndex: 100,
overlay: false,
lockScroll: false
}
});
const eventStub = sinon.stub(wrapper.vm, '$emit');
expect(wrapper.element.style.display).to.equal('none');
wrapper.vm.value = true;
wrapper.vm.$nextTick(() => {
expect(wrapper.element.style.display).to.equal('');
expect(eventStub.calledWith('input'));
done();
});
});
it('toggle popup show', () => {
wrapper = mount(Popup, {
propsData: {
value: true
}
});
expect(wrapper.element.style.display).to.equal('');
});
it('create a popup-fade transition popup', () => {
wrapper = mount(Popup, {
propsData: {
transition: 'popup-fade'
}
});
expect(wrapper.hasClass('van-popup')).to.be.true;
expect(wrapper.instance().currentTransition).to.equal('popup-fade');
});
it('popup modal', (done) => {
wrapper = mount(Popup, {
propsData: {
value: true
}
});
wrapper.vm.$on('input', val => {
wrapper.vm.value = val;
});
expect(wrapper.hasClass('van-popup')).to.be.true;
setTimeout(() => {
const modal = document.querySelector('.van-modal');
triggerTouch(modal, 'touchstart', 0, 0);
triggerTouch(modal, 'touchmove', 0, 10);
triggerTouch(modal, 'touchmove', 0, 30);
triggerTouch(modal, 'touchmove', 0, -30);
expect(modal).to.exist;
modal.click();
setTimeout(() => {
expect(wrapper.vm.value).to.be.false;
done();
}, 300);
}, 300);
});
it('popup prevent scroll', (done) => {
wrapper = mount(Popup, {
propsData: {
value: true
}
});
expect(wrapper.hasClass('van-popup')).to.be.true;
setTimeout(() => {
expect(wrapper.element.style.display).to.equal('');
wrapper.vm.value = false;
triggerTouch(document, 'touchstart', 0, 0);
triggerTouch(document, 'touchmove', 0, 10);
triggerTouch(document, 'touchmove', 0, 30);
triggerTouch(document, 'touchmove', 0, -30);
setTimeout(() => {
expect(wrapper.element.style.display).to.equal('none');
done();
}, 500);
}, 300);
});
it('treat empty string as true for boolean props', () => {
wrapper = mount(Popup, {
propsData: {
overlay: '',
lockScroll: '',
closeOnClickOverlay: ''
}
});
expect(wrapper.vm.lockScroll).to.be.true;
});
it('get container prop', done => {
const testNode = document.createElement('div');
const testNode2 = document.createElement('div');
document.body.appendChild(testNode);
document.body.appendChild(testNode2);
wrapper = mount(Popup, {
propsData: {
getContainer: () => testNode
}
});
expect(wrapper.vm.$el.parentNode === testNode).to.be.true;
wrapper.vm.getContainer = () => testNode2;
setTimeout(() => {
expect(wrapper.vm.$el.parentNode === testNode2).to.be.true;
wrapper.vm.getContainer = null;
done();
}, 100);
});
it('watch overlay change', done => {
const testNode = document.createElement('div');
document.body.appendChild(testNode);
wrapper = mount(Popup, {
propsData: {
overlay: false,
getContainer: () => testNode
}
});
expect(testNode.querySelectorAll('.van-modal').length).to.equal(0);
wrapper.vm.overlay = true;
setTimeout(() => {
expect(testNode.querySelectorAll('.van-modal').length).to.equal(1);
done();
}, 100);
});
it('popup lock scroll', done => {
wrapper = mount(Popup, {
propsData: {
value: true
}
});
setTimeout(() => {
expect(document.body.classList.contains('van-overflow-hidden')).to.be.true;
done();
}, 50);
});
});