mirror of https://github.com/ElemeFE/element
				
				
				
			
		
			
				
	
	
		
			283 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Vue
		
	
	
| import { getStyle } from '../../../src/utils/dom';
 | |
| import { createVue, destroyVM } from '../util';
 | |
| import Vue from 'vue';
 | |
| import LoadingRaw from 'packages/loading';
 | |
| const Loading = LoadingRaw.service;
 | |
| 
 | |
| describe('Loading', () => {
 | |
|   let vm, loadingInstance, loadingInstance2;
 | |
|   afterEach(() => {
 | |
|     destroyVM(vm);
 | |
|     if (loadingInstance) {
 | |
|       loadingInstance.close();
 | |
|       loadingInstance.$el &&
 | |
|       loadingInstance.$el.parentNode &&
 | |
|       loadingInstance.$el.parentNode.removeChild(loadingInstance.$el);
 | |
|     }
 | |
|     if (loadingInstance2) {
 | |
|       loadingInstance2.close();
 | |
|       loadingInstance2.$el &&
 | |
|       loadingInstance2.$el.parentNode &&
 | |
|       loadingInstance2.$el.parentNode.removeChild(loadingInstance2.$el);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   describe('as a directive', () => {
 | |
|     it('create', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       Vue.nextTick(() => {
 | |
|         const mask = vm.$el.querySelector('.el-loading-mask');
 | |
|         expect(mask).to.exist;
 | |
|         vm.loading = false;
 | |
|         setTimeout(() => {
 | |
|           expect(mask.style.display).to.equal('none');
 | |
|           done();
 | |
|         }, 100);
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('unbind', done => {
 | |
|       const vm1 = createVue({
 | |
|         template: `
 | |
|         <div v-if="show" v-loading="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             show: true,
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       const vm2 = createVue({
 | |
|         template: `
 | |
|         <div v-if="show" v-loading.body="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             show: true,
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       });
 | |
|       Vue.nextTick(() => {
 | |
|         vm1.loading = false;
 | |
|         vm2.loading = false;
 | |
|         Vue.nextTick(() => {
 | |
|           vm1.show = false;
 | |
|           vm2.show = false;
 | |
|           Vue.nextTick(() => {
 | |
|             expect(document.querySelector('.el-loading-mask')).to.not.exist;
 | |
|             done();
 | |
|           });
 | |
|         });
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('body', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading.body="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       }, true);
 | |
|       Vue.nextTick(() => {
 | |
|         const mask = document.querySelector('.el-loading-mask');
 | |
|         expect(mask.parentNode === document.body).to.true;
 | |
|         vm.loading = false;
 | |
|         document.body.removeChild(mask);
 | |
|         document.body.removeChild(vm.$el);
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('fullscreen', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading.fullscreen="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       }, true);
 | |
|       Vue.nextTick(() => {
 | |
|         const mask = document.querySelector('.el-loading-mask');
 | |
|         expect(mask.parentNode === document.body).to.true;
 | |
|         expect(mask.classList.contains('is-fullscreen')).to.true;
 | |
|         vm.loading = false;
 | |
|         document.body.removeChild(mask);
 | |
|         document.body.removeChild(vm.$el);
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('lock', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading.fullscreen.lock="loading"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       }, true);
 | |
|       Vue.nextTick(() => {
 | |
|         expect(getStyle(document.body, 'overflow')).to.equal('hidden');
 | |
|         vm.loading = false;
 | |
|         document.body.removeChild(document.querySelector('.el-loading-mask'));
 | |
|         document.body.removeChild(vm.$el);
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('text', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading="loading" element-loading-text="拼命加载中"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       }, true);
 | |
|       Vue.nextTick(() => {
 | |
|         const mask = document.querySelector('.el-loading-mask');
 | |
|         const text = mask.querySelector('.el-loading-text');
 | |
|         expect(text).to.exist;
 | |
|         expect(text.textContent).to.equal('拼命加载中');
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     it('customClass', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div v-loading="loading" element-loading-custom-class="loading-custom-class"></div>
 | |
|       `,
 | |
| 
 | |
|         data() {
 | |
|           return {
 | |
|             loading: true
 | |
|           };
 | |
|         }
 | |
|       }, true);
 | |
|       Vue.nextTick(() => {
 | |
|         const mask = document.querySelector('.el-loading-mask');
 | |
|         expect(mask.classList.contains('loading-custom-class')).to.true;
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('as a service', () => {
 | |
|     it('create', () => {
 | |
|       loadingInstance = Loading();
 | |
|       expect(document.querySelector('.el-loading-mask')).to.exist;
 | |
|     });
 | |
| 
 | |
|     it('close', () => {
 | |
|       loadingInstance = Loading();
 | |
|       loadingInstance.close();
 | |
|       expect(loadingInstance.visible).to.false;
 | |
|     });
 | |
| 
 | |
|     it('target', done => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div class="loading-container"></div>
 | |
|       `
 | |
|       }, true);
 | |
|       loadingInstance = Loading({ target: '.loading-container' });
 | |
|       let mask = document.querySelector('.el-loading-mask');
 | |
|       let container = document.querySelector('.loading-container');
 | |
|       expect(mask).to.exist;
 | |
|       expect(mask.parentNode).to.equal(container);
 | |
|       loadingInstance.close();
 | |
|       setTimeout(() => {
 | |
|         expect(getStyle(container, 'position')).to.equal('relative');
 | |
|         done();
 | |
|       }, 200);
 | |
|     });
 | |
| 
 | |
|     it('body', () => {
 | |
|       vm = createVue({
 | |
|         template: `
 | |
|         <div class="loading-container"></div>
 | |
|       `
 | |
|       }, true);
 | |
|       loadingInstance = Loading({
 | |
|         target: '.loading-container',
 | |
|         body: true
 | |
|       });
 | |
|       let mask = document.querySelector('.el-loading-mask');
 | |
|       expect(mask).to.exist;
 | |
|       expect(mask.parentNode).to.equal(document.body);
 | |
|     });
 | |
| 
 | |
|     it('fullscreen', () => {
 | |
|       loadingInstance = Loading({ fullScreen: true });
 | |
|       const mask = document.querySelector('.el-loading-mask');
 | |
|       expect(mask.parentNode).to.equal(document.body);
 | |
|       expect(mask.classList.contains('is-fullscreen')).to.true;
 | |
|     });
 | |
| 
 | |
|     it('fullscreen singleton', done => {
 | |
|       loadingInstance = Loading({ fullScreen: true });
 | |
|       setTimeout(() => {
 | |
|         loadingInstance2 = Loading({ fullScreen: true });
 | |
|         setTimeout(() => {
 | |
|           let masks = document.querySelectorAll('.el-loading-mask');
 | |
|           expect(masks.length).to.equal(1);
 | |
|           loadingInstance2.close();
 | |
|           setTimeout(() => {
 | |
|             masks = document.querySelectorAll('.el-loading-mask');
 | |
|             expect(masks.length).to.equal(0);
 | |
|             done();
 | |
|           }, 350);
 | |
|         }, 10);
 | |
|       }, 10);
 | |
|     });
 | |
| 
 | |
|     it('lock', () => {
 | |
|       loadingInstance = Loading({ lock: true });
 | |
|       expect(getStyle(document.body, 'overflow')).to.equal('hidden');
 | |
|     });
 | |
| 
 | |
|     it('text', () => {
 | |
|       loadingInstance = Loading({ text: 'Loading...' });
 | |
|       const text = document.querySelector('.el-loading-text');
 | |
|       expect(text).to.exist;
 | |
|       expect(text.textContent).to.equal('Loading...');
 | |
|     });
 | |
| 
 | |
|     it('customClass', () => {
 | |
|       loadingInstance = Loading({ customClass: 'el-loading-custom-class' });
 | |
|       const customClass = document.querySelector('.el-loading-custom-class');
 | |
|       expect(customClass).to.exist;
 | |
|     });
 | |
|   });
 | |
| });
 |