index.spec.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import Collapse from '..';
  2. import CollapseItem from '../../collapse-item';
  3. import { later, mount } from '../../../test/utils';
  4. const component = {
  5. template: `
  6. <collapse v-model="active" :accordion="accordion" :border="border">
  7. <collapse-item title="a" name="first">content</collapse-item>
  8. <collapse-item title="b">content</collapse-item>
  9. <collapse-item title="c">content</collapse-item>
  10. </collapse>
  11. `,
  12. components: {
  13. Collapse,
  14. CollapseItem
  15. },
  16. props: {
  17. accordion: Boolean,
  18. border: {
  19. type: Boolean,
  20. default: true
  21. }
  22. },
  23. data() {
  24. return {
  25. active: this.accordion ? '' : []
  26. };
  27. }
  28. };
  29. test('basic mode', async () => {
  30. const wrapper = mount(component);
  31. const titles = wrapper.findAll('.van-collapse-item__title');
  32. titles.at(0).trigger('click');
  33. expect(wrapper.vm.active).toEqual(['first']);
  34. await later();
  35. titles.at(1).trigger('click');
  36. expect(wrapper.vm.active).toEqual(['first', 1]);
  37. await later();
  38. titles.at(0).trigger('click');
  39. expect(wrapper.vm.active).toEqual([1]);
  40. wrapper.destroy();
  41. });
  42. test('accordion', async () => {
  43. const wrapper = mount(component, {
  44. propsData: {
  45. accordion: true
  46. }
  47. });
  48. const titles = wrapper.findAll('.van-collapse-item__title');
  49. titles.at(0).trigger('click');
  50. expect(wrapper.vm.active).toEqual('first');
  51. titles.at(1).trigger('click');
  52. expect(wrapper.vm.active).toEqual(1);
  53. await later();
  54. titles.at(0).trigger('click');
  55. expect(wrapper.vm.active).toEqual('first');
  56. titles.at(0).trigger('click');
  57. expect(wrapper.vm.active).toEqual('');
  58. });
  59. test('render collapse-item slot', () => {
  60. const wrapper = mount({
  61. template: `
  62. <collapse v-model="active">
  63. <collapse-item>
  64. <template v-slot:title>this is title</template>
  65. <template v-slot:value>this is value</template>
  66. <template v-slot:icon>this is icon</template>
  67. <template v-slot:right-icon>this is right icon</template>
  68. </collapse-item>
  69. </collapse>
  70. `,
  71. components: {
  72. Collapse,
  73. CollapseItem
  74. },
  75. data() {
  76. return {
  77. active: []
  78. };
  79. }
  80. });
  81. expect(wrapper).toMatchSnapshot();
  82. });
  83. test('disable border', () => {
  84. const wrapper = mount(component, {
  85. propsData: {
  86. border: false
  87. }
  88. });
  89. expect(wrapper).toMatchSnapshot();
  90. });
  91. test('lazy render collapse content', async () => {
  92. const wrapper = mount({
  93. template: `
  94. <collapse v-model="active">
  95. <collapse-item title="a" name="first" style="padding: 0;">content</collapse-item>
  96. <collapse-item title="b" style="padding: 0;">{{ content }}</collapse-item>
  97. </collapse>
  98. `,
  99. components: {
  100. Collapse,
  101. CollapseItem
  102. },
  103. data() {
  104. return {
  105. content: '',
  106. active: []
  107. };
  108. }
  109. });
  110. const titles = wrapper.findAll('.van-collapse-item__title');
  111. titles.at(1).trigger('click');
  112. await later(50);
  113. wrapper.vm.content = 'content';
  114. expect(wrapper).toMatchSnapshot();
  115. });