element-ui/test/unit/specs/util.vue-popper.spec.js
2021-06-07 11:56:04 +08:00

180 lines
4.7 KiB
Vue

import VuePopper from 'element-ui/src/utils/vue-popper';
import { createTest } from '../util';
const Popper = Object.assign({}, VuePopper, {
render(h) {
return h('div');
},
created() {
this.popperElm = document.createElement('div');
this.referenceElm = document.createElement('div');
}
});
const CleanPopper = Object.assign({}, VuePopper, {
render(h) {
return h('div');
}
});
describe('Utils:VuePopper', () => {
it('set popper not reference', () => {
const vm = createTest(CleanPopper, {
popper: document.createElement('div')
});
vm.createPopper();
expect(vm.popperElm).to.exist;
expect(vm.referenceElm).to.not.exist;
expect(vm.popperJS).to.not.exist;
});
it('set reference not popper', () => {
const vm = createTest(CleanPopper, {
reference: document.createElement('div')
});
vm.createPopper();
expect(vm.referenceElm).to.exist;
expect(vm.popperElm).to.not.exist;
expect(vm.popperJS).to.not.exist;
});
it('set reference by slot', () => {
const vm = createTest(CleanPopper);
vm.$slots['reference'] = [{
elm: document.createElement('div')
}];
vm.createPopper();
expect(vm.referenceElm).to.exist;
expect(vm.popperElm).to.not.exist;
expect(vm.popperJS).to.not.exist;
});
it('createPopper', () => {
const vm = createTest(Popper, { placement: 'top' });
vm.createPopper();
expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('top');
});
it('destroy popper when calling createPopper twice', () => {
const vm = createTest(Popper);
vm.createPopper();
const popperJS = vm.popperJS;
expect(vm.popperJS).to.exist;
expect(vm.popperJS).to.equal(popperJS);
vm.createPopper();
expect(vm.popperJS).to.not.equal(popperJS);
});
it('updatePopper', () => {
const vm = createTest(Popper);
vm.updatePopper();
const popperJS = vm.popperJS;
expect(vm.popperJS).to.exist;
vm.updatePopper();
expect(vm.popperJS).to.equal(popperJS);
});
it('doDestroy', () => {
const vm = createTest(Popper, { placement: 'top' });
vm.createPopper();
expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('top');
vm.doDestroy();
expect(vm.popperJS).to.not.exist;
});
it('destroyPopper', () => {
const vm = createTest(Popper);
const vm2 = createTest(Popper);
vm.createPopper();
expect(() => vm.destroyPopper()).to.not.throw();
expect(() => vm2.destroyPopper()).to.not.throw();
});
it('placement', () => {
const vm = createTest(Popper, { placement: 'bottom-start' });
const vm2 = createTest(Popper, { placement: 'bottom-abc' });
vm.createPopper();
vm2.createPopper();
expect(vm.popperJS._popper.getAttribute('x-placement')).to.equal('bottom-start');
expect(vm2.popperJS).to.not.exist;
});
it('display arrow', () => {
const vm = createTest(Popper, {
visibleArrow: true
});
vm.createPopper();
expect(vm.popperJS._popper.querySelector('div[x-arrow]')).to.exist;
});
it('update showPopper', done => {
const vm = createTest(Popper);
expect(vm.popperJS).to.not.exist;
vm.showPopper = true;
setTimeout(_ => {
expect(vm.popperJS).to.exist;
vm.showPopper = false;
setTimeout(_ => {
expect(vm.popperJS).to.exist;
}, 50);
done();
}, 50);
});
it('resetTransformOrigin', () => {
const vm = createTest(Popper, {
placement: 'left'
});
vm.createPopper();
expect(vm.popperJS._popper.style.transformOrigin).to.include('right center');
});
it('appendArrow', () => {
const vm = createTest(Popper, {
visibleArrow: true
});
expect(vm.appended).to.be.undefined;
vm.createPopper();
expect(vm.appended).to.true;
vm.appendArrow();
expect(vm.popperJS._popper.querySelector('[x-arrow]')).to.exist;
expect(vm.appended).to.true;
});
it('appendArrow: add scoped', () => {
const popper = document.createElement('div');
popper.setAttribute('_v-110', true);
const vm = createTest(CleanPopper, {
reference: document.createElement('div'),
visibleArrow: true,
popper
});
expect(vm.appended).to.be.undefined;
vm.createPopper();
expect(vm.popperJS._popper.querySelector('[x-arrow][_v-110]')).to.exist;
});
it('appendToBody set false', () => {
const vm = createTest(Popper, {
appendToBody: false
});
vm.createPopper();
expect(document.body.contains(vm.popperElm)).to.false;
});
it('destroy', () => {
const vm = createTest(Popper, true);
vm.createPopper();
expect(document.body.contains(vm.popperElm)).to.true;
vm.$destroy();
expect(document.body.contains(vm.popperElm)).to.false;
});
});