descriptions.spec.js 4.9 KB

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