|
@@ -1,5 +1,7 @@
|
|
|
import { createVue, destroyVM } from '../util';
|
|
|
|
|
|
+const DELAY = 10;
|
|
|
+
|
|
|
describe('Tree', () => {
|
|
|
let vm;
|
|
|
afterEach(() => {
|
|
@@ -9,30 +11,44 @@ describe('Tree', () => {
|
|
|
const getTreeVm = (props, options) => {
|
|
|
return createVue(Object.assign({
|
|
|
template: `
|
|
|
- <el-tree :data="data" ${ props }></el-tree>
|
|
|
+ <el-tree ref="tree" :data="data" ${ props }></el-tree>
|
|
|
`,
|
|
|
|
|
|
data() {
|
|
|
return {
|
|
|
+ defaultExpandedKeys: [],
|
|
|
+ defaultCheckedKeys: [],
|
|
|
clickedNode: null,
|
|
|
count: 1,
|
|
|
data: [{
|
|
|
+ id: 1,
|
|
|
label: '一级 1',
|
|
|
children: [{
|
|
|
- label: '二级 1-1'
|
|
|
+ id: 11,
|
|
|
+ label: '二级 1-1',
|
|
|
+ children: [{
|
|
|
+ id: 111,
|
|
|
+ label: '三级 1-1'
|
|
|
+ }]
|
|
|
}]
|
|
|
}, {
|
|
|
+ id: 2,
|
|
|
label: '一级 2',
|
|
|
children: [{
|
|
|
+ id: 21,
|
|
|
label: '二级 2-1'
|
|
|
}, {
|
|
|
+ id: 22,
|
|
|
label: '二级 2-2'
|
|
|
}]
|
|
|
}, {
|
|
|
+ id: 3,
|
|
|
label: '一级 3',
|
|
|
children: [{
|
|
|
+ id: 31,
|
|
|
label: '二级 3-1'
|
|
|
}, {
|
|
|
+ id: 32,
|
|
|
label: '二级 3-2'
|
|
|
}]
|
|
|
}],
|
|
@@ -45,11 +61,13 @@ describe('Tree', () => {
|
|
|
}, options), true);
|
|
|
};
|
|
|
|
|
|
+ const ALL_NODE_COUNT = 9;
|
|
|
+
|
|
|
it('create', () => {
|
|
|
vm = getTreeVm(':props="defaultProps"');
|
|
|
expect(document.querySelector('.el-tree')).to.exist;
|
|
|
expect(document.querySelectorAll('.el-tree > .el-tree-node').length).to.equal(3);
|
|
|
- expect(document.querySelectorAll('.el-tree .el-tree-node').length).to.equal(8);
|
|
|
+ expect(document.querySelectorAll('.el-tree .el-tree-node').length).to.equal(ALL_NODE_COUNT);
|
|
|
vm.data[1].children = [{ label: '二级 2-1' }];
|
|
|
const tree = vm.$children[0];
|
|
|
expect(tree.children).to.deep.equal(vm.data);
|
|
@@ -63,16 +81,25 @@ describe('Tree', () => {
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
- const firstNode = document.querySelector('.el-tree-node__content');
|
|
|
+ const firstNode = vm.$el.querySelector('.el-tree-node__content');
|
|
|
firstNode.click();
|
|
|
expect(vm.clickedNode.label).to.equal('一级 1');
|
|
|
- vm.$nextTick(() => {
|
|
|
- expect(document.querySelector('.el-tree-node').classList.contains('expanded')).to.true;
|
|
|
+ setTimeout(() => {
|
|
|
+ expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.true;
|
|
|
firstNode.click();
|
|
|
- vm.$nextTick(() => {
|
|
|
- expect(document.querySelector('.el-tree-node').classList.contains('expanded')).to.false;
|
|
|
+ setTimeout(() => {
|
|
|
+ expect(vm.$el.querySelector('.el-tree-node').classList.contains('is-expanded')).to.false;
|
|
|
done();
|
|
|
- });
|
|
|
+ }, DELAY);
|
|
|
+ }, DELAY);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('emptyText', (done) => {
|
|
|
+ vm = getTreeVm(':props="defaultProps"');
|
|
|
+ vm.data = [];
|
|
|
+ vm.$nextTick(() => {
|
|
|
+ expect(vm.$el.querySelectorAll('.el-tree__empty-block').length).to.equal(1);
|
|
|
+ done();
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -86,12 +113,62 @@ describe('Tree', () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+ it('defaultExpandAll', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" default-expand-all');
|
|
|
+ expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(ALL_NODE_COUNT);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('defaultExpandedKeys', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
|
|
|
+ created() {
|
|
|
+ this.defaultExpandedKeys = [1, 3];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('autoExpandParent = true', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
|
|
|
+ created() {
|
|
|
+ this.defaultExpandedKeys = [111];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(3);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('autoExpandParent = false', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id" :auto-expand-parent="false"', {
|
|
|
+ created() {
|
|
|
+ this.defaultExpandedKeys = [111];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('defaultCheckedKeys & check-strictly = false', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id"', {
|
|
|
+ created() {
|
|
|
+ this.defaultCheckedKeys = [1];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(3);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('defaultCheckedKeys & check-strictly', () => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" default-expand-all show-checkbox :default-checked-keys="defaultCheckedKeys" node-key="id" check-strictly', {
|
|
|
+ created() {
|
|
|
+ this.defaultCheckedKeys = [1];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ expect(vm.$el.querySelectorAll('.el-checkbox .is-checked').length).to.equal(1);
|
|
|
+ });
|
|
|
+
|
|
|
it('show checkbox', done => {
|
|
|
vm = getTreeVm(':props="defaultProps" show-checkbox');
|
|
|
const tree = vm.$children[0];
|
|
|
- const secondNode = document.querySelectorAll('.el-tree-node__content')[2];
|
|
|
+ const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
|
|
|
const nodeCheckbox = secondNode.querySelector('.el-checkbox');
|
|
|
- expect(nodeCheckbox).to.exist;
|
|
|
+ expect(nodeCheckbox).to.be.exist;
|
|
|
nodeCheckbox.click();
|
|
|
expect(tree.getCheckedNodes().length).to.equal(3);
|
|
|
expect(tree.getCheckedNodes(true).length).to.equal(2);
|
|
@@ -104,6 +181,39 @@ describe('Tree', () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+ it('setCheckedNodes', (done) => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" show-checkbox node-key="id"');
|
|
|
+ const tree = vm.$children[0];
|
|
|
+ const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
|
|
|
+ const nodeCheckbox = secondNode.querySelector('.el-checkbox');
|
|
|
+ expect(nodeCheckbox).to.be.exist;
|
|
|
+ nodeCheckbox.click();
|
|
|
+ expect(tree.getCheckedNodes().length).to.equal(3);
|
|
|
+ expect(tree.getCheckedNodes(true).length).to.equal(2);
|
|
|
+ vm.$nextTick(() => {
|
|
|
+ tree.setCheckedNodes([]);
|
|
|
+ expect(tree.getCheckedNodes().length).to.equal(0);
|
|
|
+ done();
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ it('check strictly', (done) => {
|
|
|
+ vm = getTreeVm(':props="defaultProps" show-checkbox check-strictly');
|
|
|
+ const tree = vm.$children[0];
|
|
|
+ const secondNode = document.querySelectorAll('.el-tree-node__content')[3];
|
|
|
+ const nodeCheckbox = secondNode.querySelector('.el-checkbox');
|
|
|
+ nodeCheckbox.click();
|
|
|
+ expect(tree.getCheckedNodes().length).to.equal(1);
|
|
|
+ expect(tree.getCheckedNodes(true).length).to.equal(0);
|
|
|
+ const firstLeaf = secondNode.nextElementSibling.querySelector('.el-tree-node__content');
|
|
|
+ const leafCheckbox = firstLeaf.querySelector('.el-checkbox');
|
|
|
+ vm.$nextTick(() => {
|
|
|
+ leafCheckbox.click();
|
|
|
+ expect(tree.getCheckedNodes().length).to.equal(2);
|
|
|
+ done();
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
it('render content', () => {
|
|
|
vm = getTreeVm(':props="defaultProps" :render-content="renderContent"', {
|
|
|
methods: {
|
|
@@ -127,10 +237,10 @@ describe('Tree', () => {
|
|
|
vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" show-checkbox', {
|
|
|
methods: {
|
|
|
loadNode(node, resolve) {
|
|
|
- if (node.level === -1) {
|
|
|
+ if (node.level === 0) {
|
|
|
return resolve([{ label: 'region1' }, { label: 'region2' }]);
|
|
|
}
|
|
|
- if (node.level > 3) return resolve([]);
|
|
|
+ if (node.level > 4) return resolve([]);
|
|
|
setTimeout(() => {
|
|
|
resolve([{
|
|
|
label: 'zone' + this.count++
|