menu.spec.js 11 KB

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