descriptions.spec.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { destroyVM, createVue, waitImmediate } from '../util';
  2. describe('Descriptions', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('render test', () => {
  8. vm = createVue(
  9. {
  10. template: `
  11. <el-descriptions title="title" extra="extra">
  12. <el-descriptions-item v-for="item in 4" :key="item"></el-descriptions-item>
  13. </el-descriptions>
  14. `
  15. },
  16. true
  17. );
  18. const el = vm.$el;
  19. expect(el.querySelector('.el-descriptions__title').textContent).to.equal('title');
  20. expect(el.querySelector('.el-descriptions__extra').textContent).to.equal('extra');
  21. expect(el.querySelectorAll('.el-descriptions-item__label').length).to.equal(4);
  22. });
  23. it('should render border props', () => {
  24. vm = createVue(
  25. {
  26. template: `
  27. <el-descriptions border>
  28. <el-descriptions-item v-for="item in 3" :label="item" :key="item">{{ item }}</el-descriptions-item>
  29. </el-descriptions>
  30. `
  31. },
  32. true
  33. );
  34. const el = vm.$el;
  35. expect(Array.from(el.querySelector('table').classList)).to.contain('is-bordered');
  36. });
  37. it('should render class props', () => {
  38. vm = createVue(
  39. {
  40. template: `
  41. <el-descriptions border label-class-name="label-class-name" content-class-name="content-class-name">
  42. <el-descriptions-item v-for="item in 3" :label="item" :key="item">{{ item }}</el-descriptions-item>
  43. </el-descriptions>
  44. `
  45. },
  46. true);
  47. expect(Array.from(vm.$el.querySelector('.el-descriptions-item__label').classList)).to.contain('label-class-name');
  48. expect(Array.from(vm.$el.querySelector('.el-descriptions-item__content').classList)).to.contain('content-class-name');
  49. });
  50. it('should render column props', async() => {
  51. vm = createVue({
  52. template: `
  53. <el-descriptions :column="5" :border="border">
  54. <el-descriptions-item v-for="item in 10" :label="item" :key="item">{{ item }}</el-descriptions-item>
  55. </el-descriptions>
  56. `,
  57. data() {
  58. return {
  59. border: false
  60. };
  61. }
  62. }, true);
  63. expect(vm.$el.querySelector('tr').children.length).to.equal(5);
  64. vm.border = true;
  65. await waitImmediate();
  66. expect(vm.$el.querySelector('tr').children.length).to.equal(10);
  67. });
  68. it('should render direction props', async() => {
  69. vm = createVue({
  70. template: `
  71. <el-descriptions :column="5" :direction="direction" border>
  72. <el-descriptions-item v-for="item in 10" :label="item" :key="item">{{ item }}</el-descriptions-item>
  73. </el-descriptions>
  74. `,
  75. data() {
  76. return {
  77. direction: 'horizontal'
  78. };
  79. }
  80. }, true);
  81. expect(vm.$el.querySelector('tr').children.length).to.equal(10);
  82. expect(vm.$el.querySelectorAll('tr')[0].children[0].innerHTML).to.equal(vm.$el.querySelectorAll('tr')[0].children[1].innerHTML);
  83. vm.direction = 'vertical';
  84. await waitImmediate();
  85. expect(vm.$el.querySelector('tr').children.length).to.equal(5);
  86. expect(vm.$el.querySelectorAll('tr')[0].children[0].innerHTML).to.equal(vm.$el.querySelectorAll('tr')[1].children[0].innerHTML);
  87. });
  88. it('should render title slots', async() => {
  89. vm = createVue({
  90. template: `
  91. <el-descriptions>
  92. <template slot="title">title</template>
  93. <el-descriptions-item v-for="item in 10" :label="item" :key="item">{{ item }}</el-descriptions-item>
  94. </el-descriptions>
  95. `
  96. }, true);
  97. expect(vm.$el.querySelector('.el-descriptions__title').innerText).to.equal('title');
  98. });
  99. it('should render span props', async() => {
  100. vm = createVue({
  101. template: `
  102. <el-descriptions :column="3">
  103. <el-descriptions-item label="1">1</el-descriptions-item>
  104. <el-descriptions-item label="2" :span="2">2</el-descriptions-item>
  105. <el-descriptions-item label="3">3</el-descriptions-item>
  106. </el-descriptions>
  107. `
  108. }, true);
  109. expect(vm.$el.querySelectorAll('td')[1].getAttribute('colSpan')).to.equal('2');
  110. });
  111. it('re-rendered when slots is updated', async() => {
  112. const CHANGE_VALUE = 'company';
  113. vm = createVue({
  114. template: `
  115. <div>
  116. <el-descriptions v-for="(remark,index) in remarks" :key="index" :title="remark">
  117. <el-descriptions-item label="remark">
  118. <el-tag size="small">{{remark}}</el-tag>
  119. </el-descriptions-item>
  120. </el-descriptions>
  121. <button @click="onClick">click</button>
  122. </div>
  123. `,
  124. data() {
  125. return {
  126. remarks: ['school', 'hospital']
  127. };
  128. },
  129. methods: {
  130. onClick() {
  131. this.$set(this.remarks, 0, CHANGE_VALUE);
  132. }
  133. }
  134. }, true);
  135. vm.$el.querySelector('button').click();
  136. await waitImmediate();
  137. expect(vm.$el.querySelector('.el-tag').innerText).to.equal(CHANGE_VALUE);
  138. });
  139. });