transfer.test.tsx 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. import { nextTick, reactive, ref } from 'vue'
  2. import { mount } from '@vue/test-utils'
  3. import { describe, expect, it } from 'vitest'
  4. import Transfer from '../src/transfer.vue'
  5. import type { TransferDataItem, renderContent } from '../src/transfer'
  6. describe('Transfer', () => {
  7. const getTestData = () => {
  8. const data = []
  9. for (let i = 1; i <= 15; i++) {
  10. data.push({
  11. key: i,
  12. label: `备选项 ${i}`,
  13. disabled: i % 4 === 0,
  14. })
  15. }
  16. return data
  17. }
  18. it('create', () => {
  19. const wrapper = mount(() => <Transfer data={getTestData()} />)
  20. expect(wrapper.findComponent({ name: 'ElTransfer' })).toBeTruthy()
  21. })
  22. it('default target list', () => {
  23. const value = ref([1, 4])
  24. const wrapper = mount(() => (
  25. <Transfer v-model={value.value} data={getTestData()} />
  26. ))
  27. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  28. expect(ElTransfer.vm.sourceData.length).toBe(13)
  29. })
  30. it('filterable', async () => {
  31. const value = ref([])
  32. const method = (query: string, option: TransferDataItem) => {
  33. return option.key === Number(query)
  34. }
  35. const wrapper = mount(() => (
  36. <Transfer
  37. v-model={value.value}
  38. filterable
  39. data={getTestData()}
  40. filter-method={method}
  41. />
  42. ))
  43. const leftList: any = wrapper.findComponent({ name: 'ElTransferPanel' })
  44. leftList.vm.query = '1'
  45. await leftList.find('input').setValue('1')
  46. expect(leftList.vm.filteredData.length).toBe(1)
  47. })
  48. it('transfer', async () => {
  49. const value = ref([1, 4])
  50. const wrapper = mount(() => (
  51. <Transfer
  52. v-model={value.value}
  53. leftDefaultChecked={[2, 3]}
  54. rightDefaultChecked={[1]}
  55. data={getTestData()}
  56. />
  57. ))
  58. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  59. ElTransfer.vm.addToLeft()
  60. await nextTick()
  61. expect(ElTransfer.vm.sourceData.length).toBe(14)
  62. ElTransfer.vm.addToRight()
  63. await nextTick()
  64. expect(ElTransfer.vm.sourceData.length).toBe(12)
  65. })
  66. it('customize', () => {
  67. const state = reactive({
  68. value: [2],
  69. titles: ['表1', '表2'],
  70. format: { noChecked: 'no', hasChecked: 'has' },
  71. })
  72. const renderFunc: renderContent = (_h, option) => (
  73. <span>{`${option.key} - ${option.label}`}</span>
  74. )
  75. const wrapper = mount(() => (
  76. <Transfer
  77. v-model={state.value}
  78. titles={state.titles as [string, string]}
  79. format={state.format}
  80. renderContent={renderFunc}
  81. data={getTestData()}
  82. />
  83. ))
  84. const label = wrapper.find('.el-transfer-panel__header .el-checkbox__label')
  85. expect(label.text().includes('表1')).toBeTruthy()
  86. expect(
  87. wrapper.find('.el-transfer-panel__list .el-checkbox__label span').text()
  88. ).toBe('1 - 备选项 1')
  89. expect(label.find('span').text()).toBe('no')
  90. })
  91. it('check', () => {
  92. const value = ref([])
  93. const wrapper = mount(() => (
  94. <Transfer v-model={value.value} data={getTestData()} />
  95. ))
  96. const leftList: any = wrapper.findComponent({ name: 'ElTransferPanel' })
  97. leftList.vm.handleAllCheckedChange({ target: { checked: true } })
  98. expect(leftList.vm.checked.length).toBe(12)
  99. })
  100. describe('target order', () => {
  101. it('original(default)', async () => {
  102. const value = ref([1, 4])
  103. const wrapper = mount(() => (
  104. <Transfer
  105. v-model={value.value}
  106. leftDefaultChecked={[2, 3]}
  107. data={getTestData()}
  108. />
  109. ))
  110. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  111. ElTransfer.vm.addToRight()
  112. await nextTick()
  113. const targetItems = wrapper.findAll(
  114. '.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'
  115. )
  116. expect(targetItems.map((item) => item.text())).toStrictEqual([
  117. '备选项 1',
  118. '备选项 2',
  119. '备选项 3',
  120. '备选项 4',
  121. ])
  122. })
  123. it('push', async () => {
  124. const value = ref([1, 4])
  125. const wrapper = mount(() => (
  126. <Transfer
  127. v-model={value.value}
  128. leftDefaultChecked={[2, 3]}
  129. target-order="push"
  130. data={getTestData()}
  131. />
  132. ))
  133. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  134. ElTransfer.vm.addToRight()
  135. await nextTick()
  136. const targetItems = wrapper.findAll(
  137. '.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'
  138. )
  139. expect(targetItems.map((item) => item.text())).toStrictEqual([
  140. '备选项 1',
  141. '备选项 4',
  142. '备选项 2',
  143. '备选项 3',
  144. ])
  145. })
  146. it('unshift', async () => {
  147. const value = ref([1, 4])
  148. const wrapper = mount(() => (
  149. <Transfer
  150. v-model={value.value}
  151. leftDefaultChecked={[2, 3]}
  152. target-order="unshift"
  153. data={getTestData()}
  154. />
  155. ))
  156. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  157. ElTransfer.vm.addToRight()
  158. await nextTick()
  159. const targetItems = wrapper.findAll(
  160. '.el-transfer__buttons + .el-transfer-panel .el-transfer-panel__body .el-checkbox__label span'
  161. )
  162. expect(targetItems.map((item) => item.text())).toStrictEqual([
  163. '备选项 2',
  164. '备选项 3',
  165. '备选项 1',
  166. '备选项 4',
  167. ])
  168. })
  169. })
  170. describe('validate clearQuery', () => {
  171. it('set query and clear query', async () => {
  172. const value = ref([])
  173. const wrapper = mount(() => (
  174. <Transfer
  175. v-model={value.value}
  176. filterable={true}
  177. data={getTestData()}
  178. />
  179. ))
  180. const ElTransfer: any = wrapper.findComponent({ name: 'ElTransfer' })
  181. const app = ElTransfer.vm
  182. app.leftPanel.query = '11'
  183. app.rightPanel.query = '22'
  184. await nextTick()
  185. expect(app.leftPanel.query).toBe('11')
  186. expect(app.rightPanel.query).toBe('22')
  187. app.clearQuery('left')
  188. await nextTick()
  189. expect(app.leftPanel.query).toBeFalsy()
  190. app.clearQuery('right')
  191. await nextTick()
  192. expect(app.rightPanel.query).toBeFalsy()
  193. })
  194. })
  195. })