dropdown.spec.js 4.8 KB

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