slot.spec.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import Vue from 'vue'
  2. import { mount } from '@vue/test-utils'
  3. import { Tree, VueTreeList } from '@/index'
  4. describe('Slot', () => {
  5. let wrapper
  6. beforeEach(() => {
  7. const tree = new Tree([
  8. {
  9. name: 'Node 1',
  10. id: 't1',
  11. pid: 0,
  12. children: [
  13. {
  14. name: 'Node 1-1',
  15. id: 't11',
  16. isLeaf: true,
  17. pid: 't1'
  18. }
  19. ]
  20. },
  21. {
  22. name: 'Node 2',
  23. id: 't2',
  24. pid: 0
  25. }
  26. ])
  27. wrapper = mount(VueTreeList, {
  28. propsData: { model: new Tree([]) },
  29. scopedSlots: {
  30. addTreeNodeIcon() {
  31. return <span class='add-tree-node-icon'>📂</span>
  32. },
  33. addLeafNodeIcon() {
  34. return <span class='icon'>+</span>
  35. },
  36. editNodeIcon() {
  37. return <span class='icon'>📃</span>
  38. },
  39. delNodeIcon(slotProps) {
  40. return slotProps.model.isLeaf || !slotProps.model.children ? (
  41. <span class='del-node-icon'>✂️</span>
  42. ) : (
  43. <span />
  44. )
  45. },
  46. leafNodeIcon() {
  47. return <span class='icon'>🍃</span>
  48. },
  49. treeNodeIcon(slotProps) {
  50. return (
  51. <span class='tree-node-icon icon'>
  52. {slotProps.model.children &&
  53. slotProps.model.children.length > 0 &&
  54. !slotProps.expanded
  55. ? '🌲'
  56. : '❀'}
  57. </span>
  58. )
  59. }
  60. }
  61. })
  62. wrapper.setProps({ model: tree })
  63. })
  64. it('render slot correctly', () => {
  65. expect(wrapper).toMatchSnapshot()
  66. })
  67. it('toggle tree node show different icon', done => {
  68. const $caretDown = wrapper.find('.vtl-icon-caret-down')
  69. expect(wrapper.find('#t1 .tree-node-icon').text()).toBe('❀')
  70. $caretDown.trigger('click')
  71. Vue.nextTick(() => {
  72. expect(wrapper.exists('.vtl-icon-caret-right')).toBe(true)
  73. expect(wrapper.find('#t1 .tree-node-icon').text()).toBe('🌲')
  74. done()
  75. })
  76. })
  77. it('dont show ✂️ after add child ', done => {
  78. const $addTreeNodeIcon = wrapper.find('#t2 .add-tree-node-icon')
  79. expect(wrapper.find('#t2 .del-node-icon').exists()).toBe(true)
  80. $addTreeNodeIcon.trigger('click')
  81. Vue.nextTick(() => {
  82. expect(wrapper.find('#t2 .del-node-icon').exists()).toBe(false)
  83. done()
  84. })
  85. })
  86. })