menu.spec.js 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. import { createVue, triggerEvent } from '../util';
  2. describe('Menu', () => {
  3. it('create', done => {
  4. const vm = createVue({
  5. template: `
  6. <el-menu>
  7. <el-menu-item index="1" ref="item1">处理中心</el-menu-item>
  8. <el-menu-item index="2" ref="item2">订单管理</el-menu-item>
  9. </el-menu>
  10. `
  11. }, true);
  12. var item1 = vm.$refs.item1;
  13. var item2 = vm.$refs.item2;
  14. item1.$el.click();
  15. vm.$nextTick(_ => {
  16. expect(item1.$el.classList.contains('is-active')).to.be.true;
  17. item2.$el.click();
  18. vm.$nextTick(_ => {
  19. expect(item2.$el.classList.contains('is-active')).to.be.true;
  20. done();
  21. });
  22. });
  23. });
  24. it('default active', done => {
  25. const vm = createVue({
  26. template: `
  27. <el-menu default-active="2">
  28. <el-menu-item index="1" ref="item1">处理中心</el-menu-item>
  29. <el-menu-item index="2" ref="item2">订单管理</el-menu-item>
  30. </el-menu>
  31. `
  32. }, true);
  33. expect(vm.$refs.item2.$el.classList.contains('is-active')).to.be.true;
  34. vm.$refs.item1.$el.click();
  35. vm.$nextTick(_ => {
  36. expect(vm.$refs.item1.$el.classList.contains('is-active')).to.be.true;
  37. done();
  38. });
  39. });
  40. it('active watch', done => {
  41. const vm = createVue({
  42. template: `
  43. <el-menu :default-active="active">
  44. <el-menu-item index="1" ref="item1">active watch处理中心</el-menu-item>
  45. <el-menu-item index="2" ref="item2">active watch订单管理</el-menu-item>
  46. </el-menu>
  47. `,
  48. data() {
  49. return {
  50. active: '2'
  51. };
  52. }
  53. }, true);
  54. setTimeout(_ => {
  55. vm.active = '1';
  56. vm.$nextTick(_ => {
  57. expect(vm.$refs.item1.$el.classList.contains('is-active')).to.be.true;
  58. done();
  59. });
  60. }, 100);
  61. });
  62. it('default active in submenu', done => {
  63. const vm = createVue({
  64. template: `
  65. <el-menu default-active="2-2">
  66. <el-menu-item index="1" ref="item1">处理中心</el-menu-item>
  67. <el-submenu index="2" ref="submenu">
  68. <template slot="title">我的工作台</template>
  69. <el-menu-item index="2-1">选项1</el-menu-item>
  70. <el-menu-item index="2-2" ref="submenuItem2">选项2</el-menu-item>
  71. <el-menu-item index="2-3">选项3</el-menu-item>
  72. </el-submenu>
  73. <el-menu-item index="3">订单管理</el-menu-item>
  74. </el-menu>
  75. `
  76. }, true);
  77. expect(vm.$refs.submenuItem2.$el.classList.contains('is-active')).to.be.true;
  78. // vm.$refs.item1.$el.click();
  79. vm.$nextTick(_ => {
  80. expect(vm.$refs.submenu.$el.classList.contains('is-opened')).to.be.true;
  81. done();
  82. });
  83. });
  84. it('submenu', done => {
  85. const vm = createVue({
  86. template: `
  87. <el-menu>
  88. <el-menu-item index="1" ref="item1">处理中心</el-menu-item>
  89. <el-submenu index="2" ref="submenu">
  90. <template slot="title">我的工作台</template>
  91. <el-menu-item index="2-1">选项1</el-menu-item>
  92. <el-menu-item index="2-2" ref="submenuItem2">选项2</el-menu-item>
  93. <el-menu-item index="2-3">选项3</el-menu-item>
  94. </el-submenu>
  95. <el-menu-item index="3">订单管理</el-menu-item>
  96. </el-menu>
  97. `,
  98. data() {
  99. return {
  100. };
  101. }
  102. }, true);
  103. var submenuItem2 = vm.$refs.submenuItem2;
  104. var submenu = vm.$refs.submenu;
  105. submenu.$el.querySelector('.el-submenu__title').click();
  106. vm.$nextTick(_ => {
  107. expect(submenu.$el.classList.contains('is-opened')).to.be.true;
  108. submenuItem2.$el.click();
  109. vm.$nextTick(_ => {
  110. expect(submenuItem2.$el.classList.contains('is-active')).to.be.true;
  111. submenu.$el.querySelector('.el-submenu__title').click();
  112. vm.$nextTick(_ => {
  113. expect(submenu.$el.classList.contains('is-opened')).to.not.true;
  114. done();
  115. });
  116. });
  117. });
  118. });
  119. it('submenu default opened', done => {
  120. const vm = createVue({
  121. template: `
  122. <el-menu theme="dark" :default-openeds="defaultOpeneds">
  123. <el-menu-item index="1">default opened处理中心</el-menu-item>
  124. <el-submenu index="2" ref="submenu1">
  125. <template slot="title">default opened我的工作台</template>
  126. <el-menu-item index="2-1">选项1</el-menu-item>
  127. <el-menu-item index="2-2" ref="submenu1Item2">选项2</el-menu-item>
  128. <el-menu-item index="2-3">选项3</el-menu-item>
  129. </el-submenu>
  130. <el-submenu index="3" ref="submenu2">
  131. <template slot="title">default opened订单管理</template>
  132. <el-menu-item index="3-1">选项1</el-menu-item>
  133. <el-menu-item index="3-2" ref="submenu2Item2">选项2</el-menu-item>
  134. <el-menu-item index="3-3">选项3</el-menu-item>
  135. </el-submenu>
  136. </el-menu>
  137. `,
  138. data() {
  139. return {
  140. defaultOpeneds: ['2', '3']
  141. };
  142. }
  143. }, true);
  144. expect(vm.$refs.submenu1.$el.classList.contains('is-opened')).to.be.true;
  145. expect(vm.$refs.submenu2.$el.classList.contains('is-opened')).to.be.true;
  146. vm.defaultOpeneds = ['2'];
  147. vm.$nextTick(_ => {
  148. expect(vm.$refs.submenu1.$el.classList.contains('is-opened')).to.be.true;
  149. expect(vm.$refs.submenu2.$el.classList.contains('is-opened')).to.not.true;
  150. done();
  151. });
  152. });
  153. it('theme', () => {
  154. const vm = createVue({
  155. template: `
  156. <el-menu theme="dark">
  157. <el-menu-item index="1" ref="item1">处理中心</el-menu-item>
  158. <el-menu-item index="3">订单管理</el-menu-item>
  159. </el-menu>
  160. `,
  161. data() {
  162. return {
  163. };
  164. }
  165. }, true);
  166. expect(vm.$el.classList.contains('el-menu--dark')).to.be.true;
  167. });
  168. it('unique-opened', done => {
  169. const vm = createVue({
  170. template: `
  171. <el-menu theme="dark" unique-opened default-active="2-2">
  172. <el-menu-item index="1">处理中心</el-menu-item>
  173. <el-submenu index="2" ref="submenu1">
  174. <template slot="title">我的工作台</template>
  175. <el-menu-item index="2-1">选项1</el-menu-item>
  176. <el-menu-item index="2-2" ref="submenu1Item2">选项2</el-menu-item>
  177. <el-menu-item index="2-3">选项3</el-menu-item>
  178. </el-submenu>
  179. <el-submenu index="3" ref="submenu2">
  180. <template slot="title">订单管理</template>
  181. <el-menu-item index="3-1">选项1</el-menu-item>
  182. <el-menu-item index="3-2" ref="submenu2Item2">选项2</el-menu-item>
  183. <el-menu-item index="3-3">选项3</el-menu-item>
  184. </el-submenu>
  185. </el-menu>
  186. `,
  187. data() {
  188. return {
  189. };
  190. }
  191. }, true);
  192. vm.$refs.submenu2Item2.$el.click();
  193. vm.$nextTick(_ => {
  194. expect(vm.$refs.submenu1.$el.classList.contains('is-opened')).to.not.true;
  195. expect(vm.$refs.submenu2Item2.$el.classList.contains('is-active')).to.be.true;
  196. done();
  197. });
  198. });
  199. it('horizontal mode', done => {
  200. const vm = createVue({
  201. template: `
  202. <el-menu mode="horizontal">
  203. <el-menu-item index="1">处理中心</el-menu-item>
  204. <el-submenu index="2" ref="submenu">
  205. <template slot="title">我的工作台</template>
  206. <el-menu-item index="2-1">选项1</el-menu-item>
  207. <el-menu-item index="2-2" ref="submenuItem2">选项2</el-menu-item>
  208. <el-menu-item index="2-3">选项3</el-menu-item>
  209. </el-submenu>
  210. <el-menu-item index="3">订单管理</el-menu-item>
  211. </el-menu>
  212. `,
  213. data() {
  214. return {
  215. };
  216. }
  217. }, true);
  218. expect(vm.$el.classList.contains('el-menu--horizontal')).to.be.true;
  219. var submenu = vm.$refs.submenu;
  220. triggerEvent(submenu.$el, 'mouseenter');
  221. setTimeout(_ => {
  222. expect(submenu.$el.querySelector('.el-menu').style.display).to.not.ok;
  223. triggerEvent(submenu.$el, 'mouseleave');
  224. setTimeout(_ => {
  225. expect(submenu.$el.querySelector('.el-menu').style.display).to.be.equal('none');
  226. done();
  227. }, 1000);
  228. }, 500);
  229. });
  230. it('horizontal submenu active', done => {
  231. const vm = createVue({
  232. template: `
  233. <el-menu mode="horizontal">
  234. <el-menu-item index="1">处理中心</el-menu-item>
  235. <el-submenu index="2" ref="submenu">
  236. <template slot="title">我的工作台</template>
  237. <el-menu-item index="2-1">选项1</el-menu-item>
  238. <el-menu-item index="2-2" ref="submenuItem2">选项2</el-menu-item>
  239. <el-menu-item index="2-3">选项3</el-menu-item>
  240. </el-submenu>
  241. <el-menu-item index="3">订单管理</el-menu-item>
  242. </el-menu>
  243. `
  244. }, true);
  245. let submenuItem2 = vm.$refs.submenuItem2;
  246. submenuItem2.$el.click();
  247. vm.$nextTick(_ => {
  248. expect(vm.$refs.submenu.$el.classList.contains('is-active')).to.be.true;
  249. done();
  250. });
  251. });
  252. it('menu group', done => {
  253. const vm = createVue({
  254. template: `
  255. <el-menu mode="vertical" default-active="1">
  256. <el-menu-item-group title="分组一" ref="group1">
  257. <el-menu-item index="1"><i class="el-icon-message"></i>导航一</el-menu-item>
  258. <el-menu-item index="2"><i class="el-icon-message"></i>导航二</el-menu-item>
  259. </el-menu-item-group>
  260. <el-submenu index="5">
  261. <template slot="title">导航五</template>
  262. <el-menu-item-group title="分组二">
  263. <el-menu-item index="5-1">选项1</el-menu-item>
  264. <el-menu-item index="5-2">选项2</el-menu-item>
  265. </el-menu-item-group>
  266. </el-submenu>
  267. </el-menu>
  268. `
  269. }, true);
  270. expect(vm.$refs.group1.$el.querySelector('.el-menu-item-group__title').innerText).to.be.equal('分组一');
  271. done();
  272. });
  273. });