transfer.spec.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import { createTest, createVue, destroyVM } from '../util';
  2. import Transfer from 'packages/transfer';
  3. describe('Transfer', () => {
  4. let vm;
  5. const getTestData = () => {
  6. const data = [];
  7. for (let i = 1; i <= 15; i++) {
  8. data.push({
  9. key: i,
  10. label: `备选项 ${ i }`,
  11. disabled: i % 4 === 0
  12. });
  13. }
  14. return data;
  15. };
  16. const createTransfer = (props, opts) => {
  17. return createVue(Object.assign({
  18. template: `
  19. <el-transfer :data="testData" ref="transfer" ${props}>
  20. </el-transfer>
  21. `,
  22. created() {
  23. this.testData = getTestData();
  24. }
  25. }, opts));
  26. };
  27. afterEach(() => {
  28. destroyVM(vm);
  29. });
  30. it('create', () => {
  31. vm = createTest(Transfer, true);
  32. expect(vm.$el).to.exist;
  33. });
  34. it('default target list', () => {
  35. vm = createTransfer('v-model="value"', {
  36. data() {
  37. return {
  38. value: [1, 4]
  39. };
  40. }
  41. });
  42. expect(vm.$refs.transfer.sourceData.length).to.equal(13);
  43. });
  44. it('filterable', done => {
  45. vm = createTransfer('v-model="value" filterable :filter-method="method"', {
  46. data() {
  47. return {
  48. value: [],
  49. method(query, option) {
  50. return option.key === Number(query);
  51. }
  52. };
  53. }
  54. });
  55. const transfer = vm.$refs.transfer;
  56. const leftList = transfer.$el.querySelector('.el-transfer-panel').__vue__;
  57. leftList.query = '1';
  58. setTimeout(_ => {
  59. expect(leftList.filteredData.length).to.equal(1);
  60. done();
  61. }, 50);
  62. });
  63. it('transfer', done => {
  64. vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" :right-default-checked="[1]"', {
  65. data() {
  66. return {
  67. value: [1, 4]
  68. };
  69. }
  70. });
  71. const transfer = vm.$refs.transfer;
  72. setTimeout(_ => {
  73. transfer.addToLeft();
  74. setTimeout(_ => {
  75. expect(transfer.sourceData.length).to.equal(14);
  76. transfer.addToRight();
  77. setTimeout(_ => {
  78. expect(transfer.sourceData.length).to.equal(12);
  79. done();
  80. }, 50);
  81. }, 50);
  82. }, 50);
  83. });
  84. it('customize', () => {
  85. vm = createTransfer('v-model="value" :titles="titles" :render-content="renderFunc" :format="format"', {
  86. data() {
  87. return {
  88. value: [2],
  89. titles: ['表1', '表2'],
  90. format: { noChecked: 'no', hasChecked: 'has' },
  91. renderFunc(h, option) {
  92. return <span>{ option.key } - { option.label }</span>;
  93. }
  94. };
  95. }
  96. });
  97. const transfer = vm.$refs.transfer.$el;
  98. const label = transfer.querySelector('.el-transfer-panel__header .el-checkbox__label');
  99. expect(label.innerText.indexOf('表1') > -1).to.true;
  100. expect(transfer.querySelector('.el-transfer-panel__list .el-checkbox__label span').innerText).to.equal('1 - 备选项 1');
  101. expect(label.querySelector('span').innerText).to.equal('no');
  102. });
  103. it('check', () => {
  104. vm = createTransfer('v-model="value"', {
  105. data() {
  106. return {
  107. value: []
  108. };
  109. }
  110. });
  111. const leftList = vm.$refs.transfer.$el.querySelector('.el-transfer-panel').__vue__;
  112. leftList.handleAllCheckedChange({ target: { checked: true } });
  113. expect(leftList.checked.length).to.equal(12);
  114. });
  115. describe('target order', () => {
  116. it('original(default)', done => {
  117. vm = createTransfer('v-model="value" :left-default-checked="[2, 3]"', {
  118. data() {
  119. return {
  120. value: [1, 4]
  121. };
  122. }
  123. });
  124. const transfer = vm.$refs.transfer;
  125. setTimeout(() => {
  126. transfer.addToRight();
  127. setTimeout(() => {
  128. const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
  129. expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 1', '备选项 2', '备选项 3', '备选项 4']);
  130. done();
  131. }, 50);
  132. }, 50);
  133. });
  134. it('push', done => {
  135. vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" target-order="push"', {
  136. data() {
  137. return {
  138. value: [1, 4]
  139. };
  140. }
  141. });
  142. const transfer = vm.$refs.transfer;
  143. setTimeout(() => {
  144. transfer.addToRight();
  145. setTimeout(() => {
  146. const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
  147. expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 1', '备选项 4', '备选项 2', '备选项 3']);
  148. done();
  149. }, 50);
  150. }, 50);
  151. });
  152. it('unshift', done => {
  153. vm = createTransfer('v-model="value" :left-default-checked="[2, 3]" target-order="unshift"', {
  154. data() {
  155. return {
  156. value: [1, 4]
  157. };
  158. }
  159. });
  160. const transfer = vm.$refs.transfer;
  161. setTimeout(() => {
  162. transfer.addToRight();
  163. setTimeout(() => {
  164. const targetItems = [].slice.call(vm.$el.querySelectorAll('.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'));
  165. expect(targetItems.map(item => item.innerText)).to.deep.equal(['备选项 2', '备选项 3', '备选项 1', '备选项 4']);
  166. done();
  167. }, 50);
  168. }, 50);
  169. });
  170. });
  171. });