123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- 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);
- });
- it('dropdown disabled', done => {
- vm = createVue({
- template: `
- <el-dropdown ref="dropdown" disabled>
- <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(dropdownElm.querySelectorAll('.el-dropdown-link[disabled]').length).equal(1);
- expect(dropdown.visible).to.be.false;
- done();
- }, 10);
- });
- });
|