tree.spec.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. import { createVue, destroyVM } from '../util';
  2. const DELAY = 10;
  3. describe('Tree', () => {
  4. let vm;
  5. afterEach(() => {
  6. destroyVM(vm);
  7. });
  8. const getTreeVm = (props, options) => {
  9. return createVue(Object.assign({
  10. template: `
  11. <el-tree ref="tree" :data="data" ${ props }></el-tree>
  12. `,
  13. data() {
  14. return {
  15. defaultExpandedKeys: [],
  16. defaultCheckedKeys: [],
  17. clickedNode: null,
  18. count: 1,
  19. data: [{
  20. id: 1,
  21. label: '一级 1',
  22. children: [{
  23. id: 11,
  24. label: '二级 1-1',
  25. children: [{
  26. id: 111,
  27. label: '三级 1-1'
  28. }]
  29. }]
  30. }, {
  31. id: 2,
  32. label: '一级 2',
  33. children: [{
  34. id: 21,
  35. label: '二级 2-1'
  36. }, {
  37. id: 22,
  38. label: '二级 2-2'
  39. }]
  40. }, {
  41. id: 3,
  42. label: '一级 3',
  43. children: [{
  44. id: 31,
  45. label: '二级 3-1'
  46. }, {
  47. id: 32,
  48. label: '二级 3-2'
  49. }]
  50. }],
  51. defaultProps: {
  52. children: 'children',
  53. label: 'label'
  54. }
  55. };
  56. }
  57. }, options), true);
  58. };
  59. const getDisableTreeVm = (props, options) => {
  60. return createVue(Object.assign({
  61. template: `
  62. <el-tree ref="tree" :data="data" ${ props }></el-tree>
  63. `,
  64. data() {
  65. return {
  66. defaultExpandedKeys: [],
  67. defaultCheckedKeys: [],
  68. clickedNode: null,
  69. count: 1,
  70. data: [{
  71. id: 1,
  72. label: '一级 1',
  73. children: [{
  74. id: 11,
  75. label: '二级 1-1',
  76. children: [{
  77. id: 111,
  78. label: '三级 1-1',
  79. disabled: true
  80. }]
  81. }]
  82. }, {
  83. id: 2,
  84. label: '一级 2',
  85. children: [{
  86. id: 21,
  87. label: '二级 2-1'
  88. }, {
  89. id: 22,
  90. label: '二级 2-2'
  91. }]
  92. }, {
  93. id: 3,
  94. label: '一级 3',
  95. children: [{
  96. id: 31,
  97. label: '二级 3-1'
  98. }, {
  99. id: 32,
  100. label: '二级 3-2'
  101. }]
  102. }],
  103. defaultProps: {
  104. children: 'children',
  105. label: 'label',
  106. disabled: 'disabled'
  107. }
  108. };
  109. }
  110. }, options), true);
  111. };
  112. const ALL_NODE_COUNT = 9;
  113. it('create', () => {
  114. vm = getTreeVm(':props="defaultProps" default-expand-all');
  115. expect(document.querySelector('.el-tree')).to.exist;
  116. expect(document.querySelectorAll('.el-tree > .el-tree-node').length).to.equal(3);
  117. expect(document.querySelectorAll('.el-tree .el-tree-node').length).to.equal(ALL_NODE_COUNT);
  118. vm.data[1].children = [{ label: '二级 2-1' }];
  119. const tree = vm.$children[0];
  120. expect(tree.children).to.deep.equal(vm.data);
  121. });
  122. it('click node', done => {
  123. vm = getTreeVm(':props="defaultProps" @node-click="handleNodeClick"', {
  124. methods: {
  125. handleNodeClick(data) {
  126. this.clickedNode = data;
  127. }
  128. }
  129. });
  130. const firstNode = vm.$el.querySelector('.el-tree-node__content');
  131. firstNode.click();
  132. expect(vm.clickedNode.label).to.equal('一级 1');
  133. setTimeout(() => {
  134. expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.true;
  135. firstNode.click();
  136. setTimeout(() => {
  137. expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.false;
  138. done();
  139. }, DELAY);
  140. }, DELAY);
  141. });
  142. it('current change', done => {
  143. vm = getTreeVm(':props="defaultProps" @current-change="handleCurrentChange"', {
  144. methods: {
  145. handleCurrentChange(data) {
  146. this.currentNode = data;
  147. }
  148. }
  149. });
  150. const firstNode = vm.$el.querySelector('.el-tree-node__content');
  151. firstNode.click();
  152. expect(vm.currentNode.label).to.equal('一级 1');
  153. done();
  154. });
  155. it('emptyText', (done) => {
  156. vm = getTreeVm(':props="defaultProps"');
  157. vm.data = [];
  158. vm.$nextTick(() => {
  159. expect(vm.$el.querySelectorAll('.el-tree__empty-block').length).to.equal(1);
  160. done();
  161. });
  162. });
  163. it('highlight current', done => {
  164. vm = getTreeVm(':props="defaultProps" highlight-current');
  165. const firstNode = document.querySelector('.el-tree-node');
  166. firstNode.click();
  167. vm.$nextTick(() => {
  168. expect(firstNode.className.indexOf('is-current') !== -1);
  169. done();
  170. });
  171. });
  172. it('expandOnNodeClick', done => {
  173. vm = getTreeVm(':props="defaultProps" :expand-on-node-click="false"');
  174. const firstNode = document.querySelector('.el-tree-node');
  175. firstNode.click();
  176. vm.$nextTick(() => {
  177. expect(firstNode.className.indexOf('is-expanded') === -1);
  178. done();
  179. });
  180. });
  181. it('current-node-key', done => {
  182. vm = getTreeVm(':props="defaultProps" :current-node-key="1"');
  183. const firstNode = document.querySelector('.el-tree-node');
  184. firstNode.click();
  185. vm.$nextTick(() => {
  186. expect(firstNode.classList.contains('is-current')).to.true;
  187. done();
  188. });
  189. });
  190. it('defaultExpandAll', () => {
  191. vm = getTreeVm(':props="defaultProps" default-expand-all');
  192. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(ALL_NODE_COUNT);
  193. });
  194. it('defaultExpandedKeys', () => {
  195. vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
  196. created() {
  197. this.defaultExpandedKeys = [1, 3];
  198. }
  199. });
  200. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
  201. });
  202. it('defaultExpandedKeys set', (done) => {
  203. vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
  204. created() {
  205. this.defaultExpandedKeys = [1, 3];
  206. }
  207. });
  208. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
  209. vm.defaultExpandedKeys = [2];
  210. vm.data = JSON.parse(JSON.stringify(vm.data));
  211. setTimeout(() => {
  212. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
  213. done();
  214. }, 50);
  215. });
  216. it('filter-node-method', (done) => {
  217. vm = getTreeVm(':props="defaultProps" :filter-node-method="filterNode"', {
  218. methods: {
  219. filterNode(value, data) {
  220. if (!value) return true;
  221. return data.label.indexOf(value) !== -1;
  222. }
  223. }
  224. });
  225. const tree = vm.$refs.tree;
  226. tree.filter('2-1');
  227. setTimeout(() => {
  228. expect(tree.$el.querySelectorAll('.el-tree-node.is-hidden').length).to.equal(3);
  229. done();
  230. }, 100);
  231. });
  232. it('autoExpandParent = true', () => {
  233. vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
  234. created() {
  235. this.defaultExpandedKeys = [111];
  236. }
  237. });
  238. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(3);
  239. });
  240. it('autoExpandParent = false', (done) => {
  241. vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id" :auto-expand-parent="false"', {
  242. created() {
  243. this.defaultExpandedKeys = [11];
  244. }
  245. });
  246. expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(0);
  247. const firstNode = document.querySelector('.el-tree-node__content');
  248. firstNode.querySelector('.el-tree-node__expand-icon').click();
  249. setTimeout(() => {
  250. expect(document.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
  251. done();
  252. }, 100);
  253. });
  254. it('defaultCheckedKeys & check-strictly = false', () => {
  255. vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id"', {
  256. created() {
  257. this.defaultCheckedKeys = [1];
  258. }
  259. });
  260. expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(3);
  261. });
  262. it('defaultCheckedKeys & check-strictly', () => {
  263. vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id" check-strictly', {
  264. created() {
  265. this.defaultCheckedKeys = [1];
  266. }
  267. });
  268. expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(1);
  269. });
  270. it('show checkbox', done => {
  271. vm = getTreeVm(':props="defaultProps" show-checkbox');
  272. const tree = vm.$children[0];
  273. const secondNode = document.querySelectorAll('.el-tree-node__content')[1];
  274. const nodeCheckbox = secondNode.querySelector('.el-checkbox');
  275. expect(nodeCheckbox).to.be.exist;
  276. nodeCheckbox.click();
  277. setTimeout(() => {
  278. expect(tree.getCheckedNodes().length).to.equal(3);
  279. expect(tree.getCheckedNodes(true).length).to.equal(2);
  280. secondNode.querySelector('.el-tree-node__expand-icon').click();
  281. setTimeout(() => {
  282. const firstLeaf = secondNode.nextElementSibling.querySelector('.el-tree-node__content');
  283. const leafCheckbox = firstLeaf.querySelector('.el-checkbox');
  284. leafCheckbox.click();
  285. setTimeout(() => {
  286. expect(tree.getCheckedNodes().length).to.equal(1);
  287. done();
  288. }, 10);
  289. }, 10);
  290. }, 10);
  291. });
  292. it('setCheckedNodes', (done) => {
  293. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  294. const tree = vm.$children[0];
  295. const secondNode = document.querySelectorAll('.el-tree-node__content')[1];
  296. const nodeCheckbox = secondNode.querySelector('.el-checkbox');
  297. nodeCheckbox.click();
  298. setTimeout(() => {
  299. expect(tree.getCheckedNodes().length).to.equal(3);
  300. expect(tree.getCheckedNodes(true).length).to.equal(2);
  301. setTimeout(() => {
  302. tree.setCheckedNodes([]);
  303. expect(tree.getCheckedNodes().length).to.equal(0);
  304. done();
  305. }, 10);
  306. }, 10);
  307. });
  308. it('setCheckedKeys', () => {
  309. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  310. const tree = vm.$children[0];
  311. tree.setCheckedKeys([111]);
  312. expect(tree.getCheckedNodes().length).to.equal(3);
  313. expect(tree.getCheckedKeys().length).to.equal(3);
  314. tree.setCheckedKeys([1]);
  315. setTimeout(function() {
  316. expect(tree.getCheckedNodes().length).to.equal(3);
  317. expect(tree.getCheckedKeys().length).to.equal(3);
  318. }, 0);
  319. tree.setCheckedKeys([2]);
  320. setTimeout(function() {
  321. expect(tree.getCheckedNodes().length).to.equal(3);
  322. expect(tree.getCheckedKeys().length).to.equal(3);
  323. }, 0);
  324. tree.setCheckedKeys([21]);
  325. expect(tree.getCheckedNodes().length).to.equal(1);
  326. expect(tree.getCheckedKeys().length).to.equal(1);
  327. });
  328. it('setCheckedKeys with checkStrictly', () => {
  329. vm = getTreeVm(':props="defaultProps" checkStrictly show-checkbox node-key="id"');
  330. const tree = vm.$children[0];
  331. tree.setCheckedKeys([111]);
  332. expect(tree.getCheckedNodes().length).to.equal(1);
  333. expect(tree.getCheckedKeys().length).to.equal(1);
  334. tree.setCheckedKeys([1]);
  335. setTimeout(function() {
  336. expect(tree.getCheckedNodes().length).to.equal(1);
  337. expect(tree.getCheckedKeys().length).to.equal(1);
  338. }, 0);
  339. tree.setCheckedKeys([2]);
  340. setTimeout(function() {
  341. expect(tree.getCheckedNodes().length).to.equal(1);
  342. expect(tree.getCheckedKeys().length).to.equal(1);
  343. }, 0);
  344. tree.setCheckedKeys([21, 22]);
  345. expect(tree.getCheckedNodes().length).to.equal(2);
  346. expect(tree.getCheckedKeys().length).to.equal(2);
  347. });
  348. it('method setChecked', () => {
  349. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  350. const tree = vm.$children[0];
  351. tree.setChecked(111, true, true);
  352. expect(tree.getCheckedNodes().length).to.equal(3);
  353. expect(tree.getCheckedKeys().length).to.equal(3);
  354. tree.setChecked(vm.data[0], false, true);
  355. expect(tree.getCheckedNodes().length).to.equal(0);
  356. expect(tree.getCheckedKeys().length).to.equal(0);
  357. });
  358. it('setCheckedKeys with leafOnly=false', () => {
  359. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  360. const tree = vm.$children[0];
  361. tree.setCheckedKeys([1, 11, 111, 2], false);
  362. setTimeout(function() {
  363. expect(tree.getCheckedNodes().length).to.equal(6);
  364. expect(tree.getCheckedKeys().length).to.equal(6);
  365. }, 0);
  366. });
  367. it('setCheckedKeys with leafOnly=true', () => {
  368. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  369. const tree = vm.$children[0];
  370. tree.setCheckedKeys([2], true);
  371. setTimeout(function() {
  372. expect(tree.getCheckedNodes().length).to.equal(2);
  373. expect(tree.getCheckedKeys().length).to.equal(2);
  374. }, 0);
  375. });
  376. it('setCurrentKey', (done) => {
  377. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  378. const tree = vm.$children[0];
  379. tree.setCurrentKey(111);
  380. vm.$nextTick(() => {
  381. expect(tree.store.currentNode.data.id).to.equal(111);
  382. done();
  383. });
  384. });
  385. it('setCurrentNode', (done) => {
  386. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  387. const tree = vm.$children[0];
  388. tree.setCurrentNode({
  389. id: 111,
  390. label: '三级 1-1'
  391. });
  392. vm.$nextTick(() => {
  393. expect(tree.store.currentNode.data.id).to.equal(111);
  394. done();
  395. });
  396. });
  397. it('getCurrentKey', (done) => {
  398. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  399. const tree = vm.$children[0];
  400. tree.setCurrentKey(111);
  401. vm.$nextTick(() => {
  402. expect(tree.getCurrentKey()).to.equal(111);
  403. done();
  404. });
  405. });
  406. it('getCurrentNode', (done) => {
  407. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
  408. const tree = vm.$children[0];
  409. tree.setCurrentKey(111);
  410. vm.$nextTick(() => {
  411. expect(tree.getCurrentNode().id).to.equal(111);
  412. done();
  413. });
  414. });
  415. it('set disabled checkbox', done => {
  416. vm = getDisableTreeVm(':props="defaultProps" show-checkbox node-key="id" default-expand-all');
  417. const node = document.querySelectorAll('.el-tree-node__content')[2];
  418. const nodeCheckbox = node.querySelector('.el-checkbox input');
  419. vm.$nextTick(() => {
  420. expect(nodeCheckbox.disabled).to.equal(true);
  421. done();
  422. });
  423. });
  424. it('check strictly', (done) => {
  425. vm = getTreeVm(':props="defaultProps" show-checkbox check-strictly default-expand-all');
  426. const tree = vm.$children[0];
  427. const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
  428. const nodeCheckbox = secondNode.querySelector('.el-checkbox');
  429. nodeCheckbox.click();
  430. expect(tree.getCheckedNodes().length).to.equal(1);
  431. expect(tree.getCheckedNodes(true).length).to.equal(0);
  432. const firstLeaf = secondNode.nextElementSibling.querySelector('.el-tree-node__content');
  433. const leafCheckbox = firstLeaf.querySelector('.el-checkbox');
  434. vm.$nextTick(() => {
  435. leafCheckbox.click();
  436. expect(tree.getCheckedNodes().length).to.equal(2);
  437. done();
  438. });
  439. });
  440. it('render content', () => {
  441. vm = getTreeVm(':props="defaultProps" :render-content="renderContent"', {
  442. methods: {
  443. renderContent(h, node) {
  444. return (
  445. <span class="custom-content">
  446. <el-button>{ node.node.label }</el-button>
  447. </span>
  448. );
  449. }
  450. }
  451. });
  452. const firstNode = document.querySelector('.el-tree-node__content');
  453. expect(firstNode.querySelector('.custom-content')).to.exist;
  454. const button = firstNode.querySelector('.custom-content .el-button');
  455. expect(button).to.exist;
  456. expect(button.textContent).to.equal('一级 1');
  457. });
  458. it('scoped slot', () => {
  459. vm = createVue({
  460. template: `
  461. <el-tree ref="tree" :data="data">
  462. <div slot-scope="scope" class="custom-tree-template">
  463. <span>{{ scope.node.label }}</span>
  464. <el-button></el-button>
  465. </div>
  466. </el-tree>
  467. `,
  468. data() {
  469. return {
  470. data: [{
  471. id: 1,
  472. label: '一级 1',
  473. children: [{
  474. id: 11,
  475. label: '二级 1-1',
  476. children: [{
  477. id: 111,
  478. label: '三级 1-1'
  479. }]
  480. }]
  481. }, {
  482. id: 2,
  483. label: '一级 2',
  484. children: [{
  485. id: 21,
  486. label: '二级 2-1'
  487. }, {
  488. id: 22,
  489. label: '二级 2-2'
  490. }]
  491. }, {
  492. id: 3,
  493. label: '一级 3',
  494. children: [{
  495. id: 31,
  496. label: '二级 3-1'
  497. }, {
  498. id: 32,
  499. label: '二级 3-2'
  500. }]
  501. }]
  502. };
  503. }
  504. }, true);
  505. const firstNode = document.querySelector('.custom-tree-template');
  506. expect(firstNode).to.exist;
  507. const span = firstNode.querySelector('span');
  508. const button = firstNode.querySelector('.el-button');
  509. expect(span).to.exist;
  510. expect(span.innerText).to.equal('一级 1');
  511. expect(button).to.exist;
  512. });
  513. it('load node', done => {
  514. vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" show-checkbox', {
  515. methods: {
  516. loadNode(node, resolve) {
  517. if (node.level === 0) {
  518. return resolve([{ label: 'region1' }, { label: 'region2' }]);
  519. }
  520. if (node.level > 4) return resolve([]);
  521. setTimeout(() => {
  522. resolve([{
  523. label: 'zone' + this.count++
  524. }, {
  525. label: 'zone' + this.count++
  526. }]);
  527. }, 50);
  528. }
  529. }
  530. });
  531. const nodes = document.querySelectorAll('.el-tree-node__content');
  532. expect(nodes.length).to.equal(2);
  533. nodes[0].click();
  534. setTimeout(() => {
  535. expect(document.querySelectorAll('.el-tree-node__content').length).to.equal(4);
  536. done();
  537. }, 100);
  538. });
  539. it('lazy defaultChecked', done => {
  540. vm = getTreeVm(':props="defaultProps" node-key="id" lazy :load="loadNode" show-checkbox', {
  541. methods: {
  542. loadNode(node, resolve) {
  543. if (node.level === 0) {
  544. return resolve([{ label: 'region1', id: this.count++ }, { label: 'region2', id: this.count++ }]);
  545. }
  546. if (node.level > 4) return resolve([]);
  547. setTimeout(() => {
  548. resolve([{
  549. label: 'zone' + this.count,
  550. id: this.count++
  551. }, {
  552. label: 'zone' + this.count,
  553. id: this.count++
  554. }]);
  555. }, 50);
  556. }
  557. }
  558. });
  559. const tree = vm.$children[0];
  560. const firstNode = document.querySelector('.el-tree-node__content');
  561. const initStatus = firstNode.querySelector('.is-indeterminate');
  562. expect(initStatus).to.equal(null);
  563. tree.store.setCheckedKeys([3]);
  564. firstNode.querySelector('.el-tree-node__expand-icon').click();
  565. setTimeout(() => {
  566. const clickStatus = firstNode.querySelector('.is-indeterminate');
  567. expect(clickStatus).to.not.equal(null);
  568. const child = document.querySelectorAll('.el-tree-node__content')[1];
  569. expect(child.querySelector('input').checked).to.equal(true);
  570. done();
  571. }, 300);
  572. });
  573. it('lazy expandOnChecked', done => {
  574. vm = getTreeVm(':props="defaultProps" node-key="id" lazy :load="loadNode" show-checkbox check-descendants', {
  575. methods: {
  576. loadNode(node, resolve) {
  577. if (node.level === 0) {
  578. return resolve([{ label: 'region1', id: this.count++ }, { label: 'region2', id: this.count++ }]);
  579. }
  580. if (node.level > 2) return resolve([]);
  581. setTimeout(() => {
  582. resolve([{
  583. label: 'zone' + this.count,
  584. id: this.count++
  585. }, {
  586. label: 'zone' + this.count,
  587. id: this.count++
  588. }]);
  589. }, 10);
  590. }
  591. }
  592. });
  593. const tree = vm.$children[0];
  594. tree.store.setCheckedKeys([1]);
  595. setTimeout(() => {
  596. const checkedKeys = tree.getCheckedKeys();
  597. expect(checkedKeys.length).to.equal(7);
  598. done();
  599. }, 400);
  600. });
  601. it('lazy without expandOnChecked', done => {
  602. vm = getTreeVm(':props="defaultProps" node-key="id" lazy :load="loadNode" show-checkbox', {
  603. methods: {
  604. loadNode(node, resolve) {
  605. if (node.level === 0) {
  606. return resolve([{ label: 'region1', id: this.count++ }, { label: 'region2', id: this.count++ }]);
  607. }
  608. if (node.level > 4) return resolve([]);
  609. setTimeout(() => {
  610. resolve([{
  611. label: 'zone' + this.count,
  612. id: this.count++
  613. }, {
  614. label: 'zone' + this.count,
  615. id: this.count++
  616. }]);
  617. }, 50);
  618. }
  619. }
  620. });
  621. const tree = vm.$children[0];
  622. tree.store.setCheckedKeys([1]);
  623. setTimeout(() => {
  624. const nodes = document.querySelectorAll('.el-tree-node__content');
  625. expect(nodes[0].querySelector('input').checked).to.equal(true);
  626. expect(nodes.length).to.equal(2);
  627. done();
  628. }, 300);
  629. });
  630. it('accordion', done => {
  631. vm = getTreeVm(':props="defaultProps" accordion');
  632. const firstNode = vm.$el.querySelector('.el-tree-node__content');
  633. const secondNode = vm.$el.querySelector('.el-tree-node:nth-child(2) .el-tree-node__content');
  634. firstNode.click();
  635. setTimeout(() => {
  636. expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.true;
  637. secondNode.click();
  638. setTimeout(() => {
  639. expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.false;
  640. done();
  641. }, DELAY);
  642. }, DELAY);
  643. });
  644. it('handleNodeOpen & handleNodeClose', (done) => {
  645. vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" @node-expand="handleNodeOpen" @node-collapse="handleNodeClose"', {
  646. methods: {
  647. loadNode(node, resolve) {
  648. if (node.level === 0) {
  649. return resolve([{label: 'region1'}, {label: 'region2'}]);
  650. }
  651. if (node.level > 4) return resolve([]);
  652. setTimeout(() => {
  653. resolve([{
  654. label: 'zone' + this.count++
  655. }, {
  656. label: 'zone' + this.count++
  657. }]);
  658. }, 50);
  659. },
  660. handleNodeOpen(data, node, vm) {
  661. this.currentNode = data;
  662. this.nodeExpended = true;
  663. },
  664. handleNodeClose(data, node, vm) {
  665. this.currentNode = data;
  666. this.nodeExpended = false;
  667. }
  668. }
  669. });
  670. const firstNode = document.querySelector('.el-tree-node__content');
  671. expect(firstNode.nextElementSibling).to.not.exist;
  672. firstNode.click();
  673. setTimeout(() => {
  674. expect(vm.nodeExpended).to.equal(true);
  675. expect(vm.currentNode.label).to.equal('region1');
  676. firstNode.click();
  677. setTimeout(() => {
  678. expect(vm.nodeExpended).to.equal(false);
  679. expect(vm.currentNode.label).to.equal('region1');
  680. done();
  681. }, 100);
  682. }, 100);
  683. });
  684. it('updateKeyChildren', (done) => {
  685. vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id" default-expand-all');
  686. const tree = vm.$children[0];
  687. tree.updateKeyChildren(1, [{
  688. id: 111,
  689. label: '三级 1-1'
  690. }]);
  691. const node = document.querySelectorAll('.el-tree-node__content')[2];
  692. const label = node.querySelector('.el-tree-node__label');
  693. vm.$nextTick(() => {
  694. expect(tree.store.nodesMap['11']).to.equal(undefined);
  695. expect(tree.store.nodesMap['1'].childNodes[0].data.id).to.equal(111);
  696. expect(label.textContent).to.equal('三级 1-1');
  697. done();
  698. });
  699. });
  700. });