cascader.spec.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  1. import { createVue, destroyVM, triggerEvent, triggerClick } from '../util';
  2. describe('Cascader', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', done => {
  8. vm = createVue({
  9. template: `
  10. <el-cascader
  11. ref="cascader"
  12. placeholder="请选择"
  13. :options="options"
  14. clearable
  15. v-model="selectedOptions"
  16. ></el-cascader>
  17. `,
  18. data() {
  19. return {
  20. options: [{
  21. value: 'zhejiang',
  22. label: 'Zhejiang',
  23. children: [{
  24. value: 'hangzhou',
  25. label: 'Hangzhou',
  26. children: [{
  27. value: 'xihu',
  28. label: 'West Lake'
  29. }]
  30. }, {
  31. value: 'ningbo',
  32. label: 'NingBo',
  33. children: [{
  34. value: 'jiangbei',
  35. label: 'Jiang Bei'
  36. }]
  37. }]
  38. }, {
  39. value: 'jiangsu',
  40. label: 'Jiangsu',
  41. children: [{
  42. value: 'nanjing',
  43. label: 'Nanjing',
  44. children: [{
  45. value: 'zhonghuamen',
  46. label: 'Zhong Hua Men'
  47. }]
  48. }]
  49. }],
  50. selectedOptions: []
  51. };
  52. }
  53. }, true);
  54. expect(vm.$el).to.be.exist;
  55. vm.$el.click();
  56. setTimeout(_ => {
  57. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  58. const menu = vm.$refs.cascader.menu;
  59. const menuElm = menu.$el;
  60. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  61. item1.click();
  62. menu.$nextTick(_ => {
  63. expect(menuElm.children.length).to.be.equal(3); // two menus and an arrow
  64. expect(item1.classList.contains('is-active')).to.be.true;
  65. const item2 = menuElm.children[2].querySelector('.el-cascader-menu__item');
  66. item2.click();
  67. menu.$nextTick(_ => {
  68. expect(menuElm.children.length).to.be.equal(4);
  69. expect(item2.classList.contains('is-active')).to.be.true;
  70. const item3 = menuElm.children[3].querySelector('.el-cascader-menu__item');
  71. item3.click();
  72. setTimeout(_ => {
  73. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  74. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  75. expect(vm.selectedOptions[1]).to.be.equal('hangzhou');
  76. expect(vm.selectedOptions[2]).to.be.equal('xihu');
  77. expect(vm.$refs.cascader.$el.querySelector('.el-input__inner').value).to.be.equal('');
  78. triggerEvent(vm.$refs.cascader.$el, 'mouseenter');
  79. vm.$nextTick(_ => {
  80. vm.$refs.cascader.$el.querySelector('.el-cascader__clearIcon').click();
  81. vm.$nextTick(_ => {
  82. expect(vm.selectedOptions.length).to.be.equal(0);
  83. done();
  84. });
  85. });
  86. }, 500);
  87. });
  88. });
  89. }, 300);
  90. });
  91. // Github issue #3470
  92. it('should work with zero', done => {
  93. vm = createVue({
  94. template: `
  95. <el-cascader
  96. ref="cascader"
  97. placeholder="请选择"
  98. :options="options"
  99. clearable
  100. v-model="selectedOptions"
  101. ></el-cascader>
  102. `,
  103. data() {
  104. return {
  105. options: [{
  106. value: 'zhejiang',
  107. label: 'Zhejiang',
  108. children: [{
  109. value: 0,
  110. label: 'Hangzhou',
  111. children: [{
  112. value: 'xihu',
  113. label: 'West Lake'
  114. }]
  115. }, {
  116. value: 'ningbo',
  117. label: 'NingBo',
  118. children: [{
  119. value: 'jiangbei',
  120. label: 'Jiang Bei'
  121. }]
  122. }]
  123. }, {
  124. value: 'jiangsu',
  125. label: 'Jiangsu',
  126. children: [{
  127. value: 'nanjing',
  128. label: 'Nanjing',
  129. children: [{
  130. value: 'zhonghuamen',
  131. label: 'Zhong Hua Men'
  132. }]
  133. }]
  134. }],
  135. selectedOptions: []
  136. };
  137. }
  138. }, true);
  139. expect(vm.$el).to.be.exist;
  140. vm.$el.click();
  141. setTimeout(_ => {
  142. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  143. const menu = vm.$refs.cascader.menu;
  144. const menuElm = menu.$el;
  145. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  146. item1.click();
  147. menu.$nextTick(_ => {
  148. expect(menuElm.children.length).to.be.equal(3);
  149. expect(item1.classList.contains('is-active')).to.be.true;
  150. const item2 = menuElm.children[2].querySelector('.el-cascader-menu__item');
  151. item2.click();
  152. menu.$nextTick(_ => {
  153. expect(menuElm.children.length).to.be.equal(4);
  154. expect(item2.classList.contains('is-active')).to.be.true;
  155. const item3 = menuElm.children[3].querySelector('.el-cascader-menu__item');
  156. item3.click();
  157. setTimeout(_ => {
  158. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  159. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  160. expect(vm.selectedOptions[1]).to.be.equal(0);
  161. expect(vm.selectedOptions[2]).to.be.equal('xihu');
  162. triggerEvent(vm.$refs.cascader.$el, 'mouseenter');
  163. vm.$nextTick(_ => {
  164. vm.$refs.cascader.$el.querySelector('.el-cascader__clearIcon').click();
  165. vm.$nextTick(_ => {
  166. expect(vm.selectedOptions.length).to.be.equal(0);
  167. done();
  168. });
  169. });
  170. }, 500);
  171. });
  172. });
  173. }, 300);
  174. });
  175. it('not allow clearable', done => {
  176. vm = createVue({
  177. template: `
  178. <el-cascader
  179. ref="cascader"
  180. placeholder="请选择"
  181. :options="options"
  182. :clearable="false"
  183. v-model="selectedOptions"
  184. ></el-cascader>
  185. `,
  186. data() {
  187. return {
  188. options: [{
  189. value: 'zhejiang',
  190. label: 'Zhejiang',
  191. children: [{
  192. value: 'hangzhou',
  193. label: 'Hangzhou',
  194. children: [{
  195. value: 'xihu',
  196. label: 'West Lake'
  197. }]
  198. }, {
  199. value: 'ningbo',
  200. label: 'NingBo',
  201. children: [{
  202. value: 'jiangbei',
  203. label: 'Jiang Bei'
  204. }]
  205. }]
  206. }, {
  207. value: 'jiangsu',
  208. label: 'Jiangsu',
  209. children: [{
  210. value: 'nanjing',
  211. label: 'Nanjing',
  212. children: [{
  213. value: 'zhonghuamen',
  214. label: 'Zhong Hua Men'
  215. }]
  216. }]
  217. }],
  218. selectedOptions: []
  219. };
  220. }
  221. }, true);
  222. expect(vm.$el).to.be.exist;
  223. triggerEvent(vm.$refs.cascader.$el, 'mouseenter');
  224. vm.$nextTick(_ => {
  225. expect(vm.$refs.cascader.$el.querySelector('.el-cascader__clearIcon')).to.not.exist;
  226. done();
  227. });
  228. });
  229. it('disabled options', done => {
  230. vm = createVue({
  231. template: `
  232. <el-cascader
  233. ref="cascader"
  234. placeholder="请选择"
  235. :options="options"
  236. v-model="selectedOptions"
  237. ></el-cascader>
  238. `,
  239. data() {
  240. return {
  241. options: [{
  242. value: 'zhejiang',
  243. label: 'Zhejiang',
  244. disabled: true,
  245. children: [{
  246. value: 'hangzhou',
  247. label: 'Hangzhou',
  248. children: [{
  249. value: 'xihu',
  250. label: 'West Lake'
  251. }]
  252. }, {
  253. value: 'ningbo',
  254. label: 'NingBo',
  255. children: [{
  256. value: 'jiangbei',
  257. label: 'Jiang Bei'
  258. }]
  259. }]
  260. }, {
  261. value: 'jiangsu',
  262. label: 'Jiangsu',
  263. children: [{
  264. value: 'nanjing',
  265. label: 'Nanjing',
  266. children: [{
  267. value: 'zhonghuamen',
  268. label: 'Zhong Hua Men'
  269. }]
  270. }]
  271. }],
  272. selectedOptions: []
  273. };
  274. }
  275. }, true);
  276. expect(vm.$el).to.be.exist;
  277. vm.$el.click();
  278. setTimeout(_ => {
  279. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  280. const menu = vm.$refs.cascader.menu;
  281. const menuElm = menu.$el;
  282. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  283. item1.click();
  284. menu.$nextTick(_ => {
  285. expect(menuElm.children.length).to.be.equal(2);
  286. expect(item1.classList.contains('is-active')).to.be.false;
  287. done();
  288. });
  289. }, 300);
  290. });
  291. it('default value', done => {
  292. vm = createVue({
  293. template: `
  294. <el-cascader
  295. ref="cascader"
  296. placeholder="请选择"
  297. :options="options"
  298. v-model="selectedOptions"
  299. ></el-cascader>
  300. `,
  301. data() {
  302. return {
  303. options: [{
  304. value: 'zhejiang',
  305. label: 'Zhejiang',
  306. children: [{
  307. value: 'hangzhou',
  308. label: 'Hangzhou',
  309. children: [{
  310. value: 'xihu',
  311. label: 'West Lake'
  312. }]
  313. }, {
  314. value: 'ningbo',
  315. label: 'NingBo',
  316. children: [{
  317. value: 'jiangbei',
  318. label: 'Jiang Bei'
  319. }]
  320. }]
  321. }, {
  322. value: 'jiangsu',
  323. label: 'Jiangsu',
  324. children: [{
  325. value: 'nanjing',
  326. label: 'Nanjing',
  327. children: [{
  328. value: 'zhonghuamen',
  329. label: 'Zhong Hua Men'
  330. }]
  331. }]
  332. }],
  333. selectedOptions: ['zhejiang', 'hangzhou', 'xihu']
  334. };
  335. }
  336. }, true);
  337. expect(vm.$el).to.be.exist;
  338. vm.$el.click();
  339. setTimeout(_ => {
  340. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  341. const menu = vm.$refs.cascader.menu;
  342. const menuElm = menu.$el;
  343. const item1 = menuElm.children[1].querySelector('.el-cascader-menu__item');
  344. const item2 = menuElm.children[2].querySelector('.el-cascader-menu__item');
  345. const item3 = menuElm.children[3].querySelector('.el-cascader-menu__item');
  346. expect(menuElm.children.length).to.be.equal(4);
  347. expect(item1.classList.contains('is-active')).to.be.true;
  348. expect(item2.classList.contains('is-active')).to.be.true;
  349. expect(item3.classList.contains('is-active')).to.be.true;
  350. triggerClick(document, 'mouseup');
  351. setTimeout(_ => {
  352. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  353. done();
  354. }, 500);
  355. }, 300);
  356. });
  357. it('expand by hover', done => {
  358. vm = createVue({
  359. template: `
  360. <el-cascader
  361. ref="cascader"
  362. placeholder="请选择"
  363. :options="options"
  364. expand-trigger="hover"
  365. v-model="selectedOptions"
  366. ></el-cascader>
  367. `,
  368. data() {
  369. return {
  370. options: [{
  371. value: 'zhejiang',
  372. label: 'Zhejiang',
  373. children: [{
  374. value: 'hangzhou',
  375. label: 'Hangzhou',
  376. children: [{
  377. value: 'xihu',
  378. label: 'West Lake'
  379. }]
  380. }, {
  381. value: 'ningbo',
  382. label: 'NingBo',
  383. children: [{
  384. value: 'jiangbei',
  385. label: 'Jiang Bei'
  386. }]
  387. }]
  388. }, {
  389. value: 'jiangsu',
  390. label: 'Jiangsu',
  391. children: [{
  392. value: 'nanjing',
  393. label: 'Nanjing',
  394. children: [{
  395. value: 'zhonghuamen',
  396. label: 'Zhong Hua Men'
  397. }]
  398. }]
  399. }],
  400. selectedOptions: []
  401. };
  402. }
  403. }, true);
  404. expect(vm.$el).to.be.exist;
  405. vm.$el.click();
  406. setTimeout(_ => {
  407. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  408. const menu = vm.$refs.cascader.menu;
  409. const menuElm = menu.$el;
  410. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  411. triggerEvent(item1, 'mouseenter');
  412. menu.$nextTick(_ => {
  413. expect(menuElm.children.length).to.be.equal(3);
  414. expect(item1.classList.contains('is-active')).to.be.true;
  415. const item2 = menuElm.children[2].querySelector('.el-cascader-menu__item');
  416. triggerEvent(item2, 'mouseenter');
  417. menu.$nextTick(_ => {
  418. expect(menuElm.children.length).to.be.equal(4);
  419. expect(item2.classList.contains('is-active')).to.be.true;
  420. const item3 = menuElm.children[3].querySelector('.el-cascader-menu__item');
  421. item3.click();
  422. setTimeout(_ => {
  423. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  424. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  425. expect(vm.selectedOptions[1]).to.be.equal('hangzhou');
  426. expect(vm.selectedOptions[2]).to.be.equal('xihu');
  427. done();
  428. }, 500);
  429. });
  430. });
  431. }, 300);
  432. });
  433. it('change on select', done => {
  434. vm = createVue({
  435. template: `
  436. <el-cascader
  437. ref="cascader"
  438. placeholder="请选择"
  439. :options="options"
  440. change-on-select
  441. v-model="selectedOptions"
  442. ></el-cascader>
  443. `,
  444. data() {
  445. return {
  446. options: [{
  447. value: 'zhejiang',
  448. label: 'Zhejiang',
  449. children: [{
  450. value: 'hangzhou',
  451. label: 'Hangzhou',
  452. children: [{
  453. value: 'xihu',
  454. label: 'West Lake'
  455. }]
  456. }, {
  457. value: 'ningbo',
  458. label: 'NingBo',
  459. children: [{
  460. value: 'jiangbei',
  461. label: 'Jiang Bei'
  462. }]
  463. }]
  464. }, {
  465. value: 'jiangsu',
  466. label: 'Jiangsu',
  467. children: [{
  468. value: 'nanjing',
  469. label: 'Nanjing',
  470. children: [{
  471. value: 'zhonghuamen',
  472. label: 'Zhong Hua Men'
  473. }]
  474. }]
  475. }],
  476. selectedOptions: []
  477. };
  478. }
  479. }, true);
  480. expect(vm.$el).to.be.exist;
  481. vm.$el.click();
  482. setTimeout(_ => {
  483. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  484. const menu = vm.$refs.cascader.menu;
  485. const menuElm = menu.$el;
  486. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  487. item1.click();
  488. menu.$nextTick(_ => {
  489. expect(menuElm.children.length).to.be.equal(3);
  490. expect(item1.classList.contains('is-active')).to.be.true;
  491. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  492. const item2 = menuElm.children[2].querySelector('.el-cascader-menu__item');
  493. item2.click();
  494. menu.$nextTick(_ => {
  495. expect(menuElm.children.length).to.be.equal(4);
  496. expect(item2.classList.contains('is-active')).to.be.true;
  497. expect(vm.selectedOptions[1]).to.be.equal('hangzhou');
  498. const item3 = menuElm.children[3].querySelector('.el-cascader-menu__item');
  499. item3.click();
  500. setTimeout(_ => {
  501. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  502. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  503. expect(vm.selectedOptions[1]).to.be.equal('hangzhou');
  504. expect(vm.selectedOptions[2]).to.be.equal('xihu');
  505. done();
  506. }, 500);
  507. });
  508. });
  509. }, 300);
  510. });
  511. it('hover and select', done => {
  512. vm = createVue({
  513. template: `
  514. <el-cascader
  515. ref="cascader"
  516. placeholder="请选择"
  517. :options="options"
  518. expand-trigger="hover"
  519. change-on-select
  520. v-model="selectedOptions"
  521. ></el-cascader>
  522. `,
  523. data() {
  524. return {
  525. options: [{
  526. value: 'zhejiang',
  527. label: 'Zhejiang',
  528. children: [{
  529. value: 'hangzhou',
  530. label: 'Hangzhou',
  531. children: [{
  532. value: 'xihu',
  533. label: 'West Lake'
  534. }]
  535. }, {
  536. value: 'ningbo',
  537. label: 'NingBo',
  538. children: [{
  539. value: 'jiangbei',
  540. label: 'Jiang Bei'
  541. }]
  542. }]
  543. }, {
  544. value: 'jiangsu',
  545. label: 'Jiangsu',
  546. children: [{
  547. value: 'nanjing',
  548. label: 'Nanjing',
  549. children: [{
  550. value: 'zhonghuamen',
  551. label: 'Zhong Hua Men'
  552. }]
  553. }]
  554. }],
  555. selectedOptions: []
  556. };
  557. }
  558. }, true);
  559. vm.$el.click();
  560. vm.$nextTick(() => {
  561. const menu = vm.$refs.cascader.menu;
  562. const menuElm = menu.$el;
  563. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  564. triggerEvent(item1, 'mouseenter');
  565. menu.$nextTick(() => {
  566. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  567. const spy = sinon.spy();
  568. menu.$on('closeInside', spy);
  569. item1.click();
  570. menu.$nextTick(() => {
  571. expect(spy.calledWith(true)).to.be.true;
  572. expect(menu.visible).to.be.false;
  573. done();
  574. });
  575. });
  576. });
  577. });
  578. it('filterable', done => {
  579. vm = createVue({
  580. template: `
  581. <el-cascader
  582. ref="cascader"
  583. placeholder="请选择"
  584. :options="options"
  585. filterable
  586. :debounce="0"
  587. v-model="selectedOptions"
  588. ></el-cascader>
  589. `,
  590. data() {
  591. return {
  592. options: [{
  593. value: 'zhejiang',
  594. label: 'Zhejiang',
  595. children: [{
  596. value: 'hangzhou',
  597. label: 'Hangzhou',
  598. children: [{
  599. value: 'xihu',
  600. label: 'West Lake'
  601. }]
  602. }, {
  603. value: 'ningbo',
  604. label: 'NingBo',
  605. children: [{
  606. value: 'jiangbei',
  607. label: 'Jiang Bei'
  608. }]
  609. }]
  610. }, {
  611. value: 'jiangsu',
  612. label: 'Jiangsu',
  613. children: [{
  614. value: 'nanjing',
  615. label: 'Nanjing',
  616. children: [{
  617. value: 'zhonghuamen',
  618. label: 'Zhong Hua Men'
  619. }]
  620. }]
  621. }],
  622. selectedOptions: []
  623. };
  624. }
  625. }, true);
  626. expect(vm.$el).to.be.exist;
  627. vm.$el.click();
  628. vm.$nextTick(_ => {
  629. vm.$refs.cascader.handleInputChange('z');
  630. setTimeout(_ => {
  631. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  632. const menu = vm.$refs.cascader.menu;
  633. const menuElm = menu.$el;
  634. const item1 = menuElm.querySelector('.el-cascader-menu__item');
  635. expect(menuElm.children.length).to.be.equal(2);
  636. expect(menuElm.children[1].children.length).to.be.equal(3);
  637. item1.click();
  638. setTimeout(_ => {
  639. expect(document.body.querySelector('.el-cascader-menus').style.display).to.be.equal('none');
  640. expect(vm.selectedOptions[0]).to.be.equal('zhejiang');
  641. expect(vm.selectedOptions[1]).to.be.equal('hangzhou');
  642. expect(vm.selectedOptions[2]).to.be.equal('xihu');
  643. done();
  644. }, 500);
  645. }, 300);
  646. });
  647. });
  648. it('props', done => {
  649. vm = createVue({
  650. template: `
  651. <el-cascader
  652. ref="cascader"
  653. :options="options"
  654. :props="props"
  655. v-model="selectedOptions"
  656. ></el-cascader>
  657. `,
  658. data() {
  659. return {
  660. options: [{
  661. label: 'Zhejiang',
  662. cities: [{
  663. label: 'Hangzhou'
  664. }, {
  665. label: 'NingBo'
  666. }]
  667. }, {
  668. label: 'Jiangsu',
  669. cities: [{
  670. label: 'Nanjing'
  671. }]
  672. }],
  673. props: {
  674. value: 'label',
  675. children: 'cities'
  676. },
  677. selectedOptions: []
  678. };
  679. }
  680. }, true);
  681. vm.$el.click();
  682. setTimeout(_ => {
  683. expect(document.body.querySelector('.el-cascader-menus')).to.be.exist;
  684. const menu = vm.$refs.cascader.menu;
  685. const menuElm = menu.$el;
  686. let items = menuElm.querySelectorAll('.el-cascader-menu__item');
  687. expect(items.length).to.equal(2);
  688. items[0].click();
  689. setTimeout(_ => {
  690. items = menuElm.querySelectorAll('.el-cascader-menu__item');
  691. expect(items.length).to.equal(4);
  692. expect(items[items.length - 1].innerText).to.equal('NingBo');
  693. done();
  694. }, 100);
  695. }, 100);
  696. });
  697. it('show last level', done => {
  698. vm = createVue({
  699. template: `
  700. <el-cascader
  701. ref="cascader"
  702. :options="options"
  703. :show-all-levels="false"
  704. v-model="selectedOptions"
  705. ></el-cascader>
  706. `,
  707. data() {
  708. return {
  709. options: [{
  710. value: 'zhejiang',
  711. label: 'Zhejiang',
  712. children: [{
  713. value: 'hangzhou',
  714. label: 'Hangzhou',
  715. children: [{
  716. value: 'xihu',
  717. label: 'West Lake'
  718. }]
  719. }, {
  720. value: 'ningbo',
  721. label: 'NingBo',
  722. children: [{
  723. value: 'jiangbei',
  724. label: 'Jiang Bei'
  725. }]
  726. }]
  727. }, {
  728. value: 'jiangsu',
  729. label: 'Jiangsu',
  730. children: [{
  731. value: 'nanjing',
  732. label: 'Nanjing',
  733. children: [{
  734. value: 'zhonghuamen',
  735. label: 'Zhong Hua Men'
  736. }]
  737. }]
  738. }],
  739. selectedOptions: ['zhejiang', 'ningbo', 'jiangbei']
  740. };
  741. }
  742. }, true);
  743. setTimeout(_ => {
  744. const span = vm.$el.querySelector('.el-cascader__label');
  745. expect(span.innerText).to.equal('Jiang Bei');
  746. done();
  747. }, 100);
  748. });
  749. describe('Cascader Events', () => {
  750. it('event:focus & blur', done => {
  751. vm = createVue({
  752. template: `
  753. <el-cascader
  754. ref="cascader"
  755. placeholder="请选择"
  756. :options="options"
  757. clearable
  758. v-model="selectedOptions"
  759. ></el-cascader>
  760. `,
  761. data() {
  762. return {
  763. options: [{
  764. value: 'zhejiang',
  765. label: 'Zhejiang',
  766. children: [{
  767. value: 'hangzhou',
  768. label: 'Hangzhou',
  769. children: [{
  770. value: 'xihu',
  771. label: 'West Lake'
  772. }]
  773. }, {
  774. value: 'ningbo',
  775. label: 'NingBo',
  776. children: [{
  777. value: 'jiangbei',
  778. label: 'Jiang Bei'
  779. }]
  780. }]
  781. }, {
  782. value: 'jiangsu',
  783. label: 'Jiangsu',
  784. children: [{
  785. value: 'nanjing',
  786. label: 'Nanjing',
  787. children: [{
  788. value: 'zhonghuamen',
  789. label: 'Zhong Hua Men'
  790. }]
  791. }]
  792. }],
  793. selectedOptions: []
  794. };
  795. }
  796. }, true);
  797. const spyFocus = sinon.spy();
  798. const spyBlur = sinon.spy();
  799. vm.$refs.cascader.$on('focus', spyFocus);
  800. vm.$refs.cascader.$on('blur', spyBlur);
  801. vm.$el.querySelector('input').focus();
  802. vm.$el.querySelector('input').blur();
  803. vm.$nextTick(_ => {
  804. expect(spyFocus.calledOnce).to.be.true;
  805. expect(spyBlur.calledOnce).to.be.true;
  806. done();
  807. });
  808. });
  809. });
  810. });