mirror of https://github.com/ElemeFE/element
				
				
				
			
		
			
				
	
	
		
			284 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			284 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Vue
		
	
	
| import { createVue, triggerEvent, destroyVM, triggerKeyDown } from '../util';
 | |
| 
 | |
| describe('Dropdown', () => {
 | |
|   let vm;
 | |
|   afterEach(() => {
 | |
|     destroyVM(vm);
 | |
|   });
 | |
| 
 | |
|   it('create', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown" class="dropdown-test-creat">
 | |
|             <el-dropdown-item>黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item>狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item>螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item>双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item>蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     setTimeout(_ => {
 | |
|       expect(dropdown.visible).to.be.true;
 | |
| 
 | |
|       triggerEvent(triggerElm, 'mouseleave');
 | |
|       setTimeout(_ => {
 | |
|         expect(dropdown.visible).to.not.true;
 | |
|         done();
 | |
|       }, 300);
 | |
|     }, 400);
 | |
|   });
 | |
|   it('menu click', done => {
 | |
|     const myCommandObject = { name: 'CommandC' };
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown">
 | |
|             <el-dropdown-item command="a">黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item command="b">狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item ref="commandC" :command="myCommandObject">螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item command="d">双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `,
 | |
|       data() {
 | |
|         return {
 | |
|           myCommandObject
 | |
|         };
 | |
|       }
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
|     let callback = sinon.spy();
 | |
| 
 | |
|     dropdown.$on('command', callback);
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     setTimeout(_ => {
 | |
|       vm.$refs.commandC.$el.click();
 | |
|       setTimeout(_ => {
 | |
|         expect(dropdown.visible).to.not.true;
 | |
|         expect(callback.calledWith(myCommandObject)).to.be.true;
 | |
|         done();
 | |
|       }, 300);
 | |
|     }, 300);
 | |
|   });
 | |
|   it('trigger', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown trigger="click" ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单trigger click<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown">
 | |
|             <el-dropdown-item>黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item @click.native="handleClick">狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item>螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item>双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item>蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdownElm = vm.$el;
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     dropdown.$nextTick(_ => {
 | |
|       expect(dropdown.visible).to.not.true;
 | |
|       triggerElm.click();
 | |
|       setTimeout(_ => {
 | |
|         expect(dropdown.visible).to.be.true;
 | |
|         done();
 | |
|       }, 300);
 | |
|     });
 | |
|   });
 | |
|   it('split button', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown split-button type="primary" ref="dropdown">
 | |
|           更多菜单
 | |
|           <el-dropdown-menu slot="dropdown" class="dropdown-test-split-button">
 | |
|             <el-dropdown-item>黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item>狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item>螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item>双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item>蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
| 
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.querySelector('.el-dropdown__caret-button');
 | |
|     var callback = sinon.spy();
 | |
| 
 | |
|     dropdown.$on('click', callback);
 | |
|     dropdownElm.querySelector('.el-button').click();
 | |
| 
 | |
|     setTimeout(_ => {
 | |
|       expect(callback.called).to.be.true;
 | |
|     }, 300);
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     setTimeout(_ => {
 | |
|       expect(dropdown.visible).to.be.true;
 | |
| 
 | |
|       triggerEvent(triggerElm, 'mouseleave');
 | |
|       setTimeout(_ => {
 | |
|         expect(dropdown.visible).to.not.true;
 | |
|         done();
 | |
|       }, 300);
 | |
|     }, 300);
 | |
|   });
 | |
|   it('hide on click', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown" :hide-on-click="false">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown">
 | |
|             <el-dropdown-item command="a">黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item command="b">狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item ref="commandC" command="c">螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item command="d">双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
|     let callback = sinon.spy();
 | |
| 
 | |
|     dropdown.$on('command', callback);
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     setTimeout(_ => {
 | |
|       vm.$refs.commandC.$el.click();
 | |
|       setTimeout(_ => {
 | |
|         expect(dropdown.visible).to.true;
 | |
|         expect(callback.calledWith('c')).to.be.true;
 | |
|         done();
 | |
|       }, 300);
 | |
|     }, 300);
 | |
|   });
 | |
|   it('triggerElm keydown', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown" class="dropdown-test-creat">
 | |
|             <el-dropdown-item>黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item>狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item>螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item>双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item>蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
|     triggerKeyDown(triggerElm, 13); // enter
 | |
|     setTimeout(() => {
 | |
|       expect(dropdown.visible).to.be.true;
 | |
|       triggerKeyDown(triggerElm, 27); // esc
 | |
|       setTimeout(() => {
 | |
|         expect(dropdown.visible).to.be.false;
 | |
|         done();
 | |
|       }, 300);
 | |
|     }, 400);
 | |
|   });
 | |
|   it('dropdown menu keydown', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown" class="dropdown-test-creat">
 | |
|             <el-dropdown-item command="a">黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item command="b">狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item command="c">螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item command="d">双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
|     let dropdownMenu = dropdown.dropdownElm;
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
| 
 | |
|     setTimeout(() => {
 | |
|       expect(dropdown.visible).to.be.true;
 | |
|       triggerKeyDown(dropdownMenu, 40); // down
 | |
|       setTimeout(() => {
 | |
|         triggerKeyDown(dropdownMenu, 13); // enter
 | |
|         setTimeout(() => {
 | |
|           expect(dropdown.visible).to.be.false;
 | |
|           done();
 | |
|         }, 100);
 | |
|       }, 100);
 | |
|     }, 300);
 | |
|   });
 | |
|   it('updatePopper', done => {
 | |
|     vm = createVue({
 | |
|       template: `
 | |
|         <el-dropdown ref="dropdown">
 | |
|           <span class="el-dropdown-link">
 | |
|             下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
 | |
|           </span>
 | |
|           <el-dropdown-menu slot="dropdown" class="dropdown-test-creat">
 | |
|             <el-dropdown-item>黄金糕</el-dropdown-item>
 | |
|             <el-dropdown-item>狮子头</el-dropdown-item>
 | |
|             <el-dropdown-item>螺蛳粉</el-dropdown-item>
 | |
|             <el-dropdown-item>双皮奶</el-dropdown-item>
 | |
|             <el-dropdown-item>蚵仔煎</el-dropdown-item>
 | |
|           </el-dropdown-menu>
 | |
|         </el-dropdown>
 | |
|       `
 | |
|     }, true);
 | |
|     let dropdown = vm.$refs.dropdown;
 | |
|     let dropdownElm = dropdown.$el;
 | |
|     let triggerElm = dropdownElm.children[0];
 | |
| 
 | |
|     triggerEvent(triggerElm, 'mouseenter');
 | |
|     setTimeout(() => {
 | |
|       const zIndex1 = document.querySelector('.el-dropdown-menu').style.zIndex;
 | |
|       dropdown.broadcast('ElDropdownMenu', 'updatePopper');
 | |
|       setTimeout(() => {
 | |
|         const zIndex2 = document.querySelector('.el-dropdown-menu').style.zIndex;
 | |
|         expect(zIndex2 > zIndex1).to.be.true;
 | |
|         done();
 | |
|       }, 100);
 | |
|     }, 300);
 | |
|   });
 | |
| });
 |