dropdown.spec.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. const myCommandObject = { name: 'CommandC' };
  40. vm = createVue({
  41. template: `
  42. <el-dropdown ref="dropdown">
  43. <span class="el-dropdown-link">
  44. 下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
  45. </span>
  46. <el-dropdown-menu slot="dropdown">
  47. <el-dropdown-item command="a">黄金糕</el-dropdown-item>
  48. <el-dropdown-item command="b">狮子头</el-dropdown-item>
  49. <el-dropdown-item ref="commandC" :command="myCommandObject">螺蛳粉</el-dropdown-item>
  50. <el-dropdown-item command="d">双皮奶</el-dropdown-item>
  51. <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
  52. </el-dropdown-menu>
  53. </el-dropdown>
  54. `,
  55. data() {
  56. return {
  57. myCommandObject
  58. };
  59. }
  60. }, true);
  61. let dropdown = vm.$refs.dropdown;
  62. let dropdownElm = dropdown.$el;
  63. let triggerElm = dropdownElm.children[0];
  64. let callback = sinon.spy();
  65. dropdown.$on('command', callback);
  66. triggerEvent(triggerElm, 'mouseenter');
  67. setTimeout(_ => {
  68. vm.$refs.commandC.$el.click();
  69. setTimeout(_ => {
  70. expect(dropdown.visible).to.not.true;
  71. expect(callback.calledWith(myCommandObject)).to.be.true;
  72. destroyVM(vm);
  73. done();
  74. }, 300);
  75. }, 300);
  76. });
  77. it('trigger', done => {
  78. vm = createVue({
  79. template: `
  80. <el-dropdown trigger="click" ref="dropdown">
  81. <span class="el-dropdown-link">
  82. 下拉菜单trigger click<i class="el-icon-caret-bottom el-icon-right"></i>
  83. </span>
  84. <el-dropdown-menu slot="dropdown">
  85. <el-dropdown-item>黄金糕</el-dropdown-item>
  86. <el-dropdown-item @click.native="handleClick">狮子头</el-dropdown-item>
  87. <el-dropdown-item>螺蛳粉</el-dropdown-item>
  88. <el-dropdown-item>双皮奶</el-dropdown-item>
  89. <el-dropdown-item>蚵仔煎</el-dropdown-item>
  90. </el-dropdown-menu>
  91. </el-dropdown>
  92. `
  93. }, true);
  94. let dropdownElm = vm.$el;
  95. let dropdown = vm.$refs.dropdown;
  96. let triggerElm = dropdownElm.children[0];
  97. triggerEvent(triggerElm, 'mouseenter');
  98. dropdown.$nextTick(_ => {
  99. expect(dropdown.visible).to.not.true;
  100. triggerElm.click();
  101. dropdown.$nextTick(_ => {
  102. expect(dropdown.visible).to.be.true;
  103. destroyVM(vm);
  104. done();
  105. });
  106. });
  107. });
  108. it('split button', done => {
  109. vm = createVue({
  110. template: `
  111. <el-dropdown split-button type="primary" ref="dropdown">
  112. 更多菜单
  113. <el-dropdown-menu slot="dropdown" class="dropdown-test-split-button">
  114. <el-dropdown-item>黄金糕</el-dropdown-item>
  115. <el-dropdown-item>狮子头</el-dropdown-item>
  116. <el-dropdown-item>螺蛳粉</el-dropdown-item>
  117. <el-dropdown-item>双皮奶</el-dropdown-item>
  118. <el-dropdown-item>蚵仔煎</el-dropdown-item>
  119. </el-dropdown-menu>
  120. </el-dropdown>
  121. `
  122. }, true);
  123. let dropdown = vm.$refs.dropdown;
  124. let dropdownElm = dropdown.$el;
  125. let triggerElm = dropdownElm.querySelector('.el-dropdown__caret-button');
  126. var callback = sinon.spy();
  127. dropdown.$on('click', callback);
  128. dropdownElm.querySelector('.el-button').click();
  129. setTimeout(_ => {
  130. expect(callback.called).to.be.true;
  131. }, 300);
  132. triggerEvent(triggerElm, 'mouseenter');
  133. setTimeout(_ => {
  134. expect(dropdown.visible).to.be.true;
  135. triggerEvent(triggerElm, 'mouseleave');
  136. setTimeout(_ => {
  137. expect(dropdown.visible).to.not.true;
  138. destroyVM(vm);
  139. done();
  140. }, 300);
  141. }, 300);
  142. }).timeout(3000);
  143. it('hide on click', done => {
  144. vm = createVue({
  145. template: `
  146. <el-dropdown ref="dropdown" :hide-on-click="false">
  147. <span class="el-dropdown-link">
  148. 下拉菜单<i class="el-icon-caret-bottom el-icon-right"></i>
  149. </span>
  150. <el-dropdown-menu slot="dropdown">
  151. <el-dropdown-item command="a">黄金糕</el-dropdown-item>
  152. <el-dropdown-item command="b">狮子头</el-dropdown-item>
  153. <el-dropdown-item ref="commandC" command="c">螺蛳粉</el-dropdown-item>
  154. <el-dropdown-item command="d">双皮奶</el-dropdown-item>
  155. <el-dropdown-item command="e">蚵仔煎</el-dropdown-item>
  156. </el-dropdown-menu>
  157. </el-dropdown>
  158. `
  159. }, true);
  160. let dropdown = vm.$refs.dropdown;
  161. let dropdownElm = dropdown.$el;
  162. let triggerElm = dropdownElm.children[0];
  163. let callback = sinon.spy();
  164. dropdown.$on('command', callback);
  165. triggerEvent(triggerElm, 'mouseenter');
  166. setTimeout(_ => {
  167. vm.$refs.commandC.$el.click();
  168. setTimeout(_ => {
  169. expect(dropdown.visible).to.true;
  170. expect(callback.calledWith('c')).to.be.true;
  171. done();
  172. }, 300);
  173. }, 300);
  174. });
  175. });