dropdown.spec.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import { createVue, triggerEvent, destroyVM } from '../util';
  2. describe('Dropdown', () => {
  3. it('create', done => {
  4. const vm = createVue({
  5. template: `
  6. <el-dropdown ref="dropdown">
  7. <span class="el-dropdown-link">
  8. 下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
  9. </span>
  10. <el-dropdown-menu slot="dropdown" class="dropdown-test-creat">
  11. <el-dropdown-item>黄金糕</el-dropdown-item>
  12. <el-dropdown-item>狮子头</el-dropdown-item>
  13. <el-dropdown-item>螺蛳粉</el-dropdown-item>
  14. <el-dropdown-item>双皮奶</el-dropdown-item>
  15. <el-dropdown-item>蚵仔煎</el-dropdown-item>
  16. </el-dropdown-menu>
  17. </el-dropdown>
  18. `
  19. }, true);
  20. let dropdown = vm.$refs.dropdown;
  21. let dropdownElm = dropdown.$el;
  22. let triggerElm = dropdownElm.children[0];
  23. triggerEvent(triggerElm, 'mouseenter');
  24. setTimeout(_ => {
  25. expect(dropdown.visible).to.be.true;
  26. triggerEvent(triggerElm, 'mouseleave');
  27. setTimeout(_ => {
  28. expect(dropdown.visible).to.not.true;
  29. destroyVM(vm);
  30. done();
  31. }, 300);
  32. }, 400);
  33. });
  34. it('menu click', done => {
  35. const vm = createVue({
  36. template: `
  37. <el-dropdown ref="dropdown">
  38. <span class="el-dropdown-link">
  39. 下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
  40. </span>
  41. <el-dropdown-menu slot="dropdown" class="dropdown-test-menu-click">
  42. <el-dropdown-item command="a">黄金糕</el-dropdown-item>
  43. <el-dropdown-item command="b">狮子头</el-dropdown-item>
  44. <el-dropdown-item ref="commandC" command="c">螺蛳粉</el-dropdown-item>
  45. <el-dropdown-item command="d">双皮奶</el-dropdown-item>
  46. <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
  47. </el-dropdown-menu>
  48. </el-dropdown>
  49. `
  50. }, true);
  51. let dropdown = vm.$refs.dropdown;
  52. let dropdownElm = dropdown.$el;
  53. let triggerElm = dropdownElm.children[0];
  54. let callback = sinon.spy();
  55. dropdown.$on('command', callback);
  56. triggerEvent(triggerElm, 'mouseenter');
  57. setTimeout(_ => {
  58. vm.$refs.commandC.$el.click();
  59. setTimeout(_ => {
  60. expect(dropdown.visible).to.not.true;
  61. expect(callback.calledWith('c')).to.be.true;
  62. destroyVM(vm);
  63. done();
  64. }, 300);
  65. }, 300);
  66. });
  67. it('trigger', done => {
  68. const vm = createVue({
  69. template: `
  70. <el-dropdown trigger="click" ref="dropdown">
  71. <span class="el-dropdown-link">
  72. 下拉菜单trigger click<i class="el-icon-caret-bottom el-icon-right"></i>
  73. </span>
  74. <el-dropdown-menu slot="dropdown" class="dropdown-test-menu-click">
  75. <el-dropdown-item>黄金糕</el-dropdown-item>
  76. <el-dropdown-item @click.native="handleClick">狮子头</el-dropdown-item>
  77. <el-dropdown-item>螺蛳粉</el-dropdown-item>
  78. <el-dropdown-item>双皮奶</el-dropdown-item>
  79. <el-dropdown-item>蚵仔煎</el-dropdown-item>
  80. </el-dropdown-menu>
  81. </el-dropdown>
  82. `
  83. }, true);
  84. let dropdownElm = vm.$el;
  85. let dropdown = vm.$refs.dropdown;
  86. let triggerElm = dropdownElm.children[0];
  87. triggerEvent(triggerElm, 'mouseenter');
  88. dropdown.$nextTick(_ => {
  89. expect(dropdown.visible).to.not.true;
  90. triggerElm.click();
  91. dropdown.$nextTick(_ => {
  92. expect(dropdown.visible).to.be.true;
  93. destroyVM(vm);
  94. done();
  95. });
  96. });
  97. });
  98. it('split button', done => {
  99. const vm = createVue({
  100. template: `
  101. <el-dropdown split-button type="primary" ref="dropdown">
  102. 更多菜单
  103. <el-dropdown-menu slot="dropdown" class="dropdown-test-split-button">
  104. <el-dropdown-item>黄金糕</el-dropdown-item>
  105. <el-dropdown-item>狮子头</el-dropdown-item>
  106. <el-dropdown-item>螺蛳粉</el-dropdown-item>
  107. <el-dropdown-item>双皮奶</el-dropdown-item>
  108. <el-dropdown-item>蚵仔煎</el-dropdown-item>
  109. </el-dropdown-menu>
  110. </el-dropdown>
  111. `
  112. }, true);
  113. let dropdown = vm.$refs.dropdown;
  114. let dropdownElm = dropdown.$el;
  115. let triggerElm = dropdownElm.querySelector('.el-dropdown__caret-button');
  116. var callback = sinon.spy();
  117. dropdown.$on('click', callback);
  118. dropdownElm.querySelector('.el-button').click();
  119. setTimeout(_ => {
  120. expect(callback.called).to.be.true;
  121. }, 300);
  122. triggerEvent(triggerElm, 'mouseenter');
  123. setTimeout(_ => {
  124. expect(dropdown.visible).to.be.true;
  125. triggerEvent(triggerElm, 'mouseleave');
  126. setTimeout(_ => {
  127. expect(dropdown.visible).to.not.true;
  128. destroyVM(vm);
  129. done();
  130. }, 300);
  131. }, 300);
  132. });
  133. });