pagination.spec.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import { createTest, createVue, triggerEvent, destroyVM } from '../util';
  2. import Pagination from 'packages/pagination';
  3. describe('Pagination', () => {
  4. let vm;
  5. afterEach(() => {
  6. destroyVM(vm);
  7. });
  8. it('create', () => {
  9. vm = createTest(Pagination);
  10. const elm = vm.$el;
  11. // prev
  12. expect(elm.querySelector('button.btn-prev')).to.exist;
  13. // pager
  14. expect(elm.querySelector('ul.el-pager')).to.exist;
  15. // next
  16. expect(elm.querySelector('button.btn-next')).to.exist;
  17. // jumper
  18. expect(elm.querySelector('.el-pagination__jump')).to.exist;
  19. // ->
  20. expect(elm.querySelector('.el-pagination__rightwrapper')).to.exist;
  21. // total
  22. expect(elm.querySelector('.el-pagination__total')).to.exist;
  23. });
  24. it('set layout', () => {
  25. vm = createTest(Pagination, {
  26. layout: 'prev, pager, next'
  27. });
  28. const elm = vm.$el;
  29. // prev
  30. expect(elm.querySelector('button.btn-prev')).to.exist;
  31. // pager
  32. expect(elm.querySelector('ul.el-pager')).to.exist;
  33. // next
  34. expect(elm.querySelector('button.btn-next')).to.exist;
  35. // not found jumper
  36. expect(elm.querySelector('.el-pagination__jump')).to.not.exist;
  37. // not found ->
  38. expect(elm.querySelector('.el-pagination__rightwrapper')).to.not.exist;
  39. // not found total
  40. expect(elm.querySelector('.el-pagination__total')).to.not.exist;
  41. });
  42. it('small', () => {
  43. vm = createTest(Pagination, {
  44. small: true
  45. });
  46. expect(vm.$el.classList.contains('el-pagination--small')).to.true;
  47. });
  48. it('pageSize', () => {
  49. vm = createTest(Pagination, {
  50. pageSize: 25,
  51. total: 100
  52. });
  53. expect(vm.$el.querySelectorAll('li.number')).to.length(4);
  54. });
  55. it('currentPage', () => {
  56. vm = createTest(Pagination, {
  57. pageSize: 20,
  58. total: 200,
  59. currentPage: 3
  60. });
  61. expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('3');
  62. });
  63. it('pageSizes', () => {
  64. vm = createTest(Pagination, {
  65. pageSizes: [10, 15, 35, 50],
  66. pageSize: 35,
  67. total: 1000,
  68. layout: 'sizes, prev, pager, next'
  69. });
  70. expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('35');
  71. expect([].slice.call(vm.$el.querySelectorAll('.el-select-dropdown__item'))
  72. .map(node => parseInt(node.textContent, 10)))
  73. .to.deep.equal([10, 15, 35, 50]);
  74. });
  75. it('pageSizes:not found pageSize', () => {
  76. vm = createTest(Pagination, {
  77. pageSizes: [10, 15, 35, 50],
  78. pageSize: 24,
  79. total: 1000,
  80. layout: 'sizes, prev, pager, next'
  81. });
  82. expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('10');
  83. });
  84. it('layout is empty', () => {
  85. vm = createTest(Pagination, {
  86. layout: ''
  87. });
  88. expect(vm.$el.textContent).to.empty;
  89. });
  90. it('jumper: change value', () => {
  91. vm = createVue({
  92. template: `
  93. <el-pagination
  94. @current-change="handleChange"
  95. :page-size="10"
  96. :total="100" />
  97. `,
  98. methods: {
  99. handleChange(val) {
  100. this.page = val;
  101. }
  102. },
  103. data() {
  104. return { page: 0 };
  105. }
  106. }, true);
  107. const input = vm.$el.querySelector('.el-pagination__jump input');
  108. input.focus();
  109. input.value = -1;
  110. triggerEvent(input, 'change');
  111. expect(vm.page).to.equal(1);
  112. input.value = 10000;
  113. triggerEvent(input, 'change');
  114. expect(vm.page).to.equal(10);
  115. input.value = '我好帅';
  116. triggerEvent(input, 'change');
  117. expect(vm.page).to.equal(1);
  118. });
  119. it('event:current-change', () => {
  120. vm = createVue({
  121. template: `
  122. <el-pagination
  123. :total="1000"
  124. @current-change="change = true" />
  125. `,
  126. data() {
  127. return { change: false };
  128. }
  129. });
  130. const next = vm.$el.querySelector('button.btn-next');
  131. const prev = vm.$el.querySelector('button.btn-prev');
  132. expect(vm.change).to.false;
  133. // click 9
  134. let count = 9;
  135. while (--count) {
  136. next.click();
  137. }
  138. prev.click();
  139. expect(vm.change).to.true;
  140. });
  141. it('event:size-change', done => {
  142. vm = createVue({
  143. template: `
  144. <el-pagination
  145. :total="100"
  146. layout="sizes, prev, pager, next"
  147. @size-change="trigger = true"
  148. :pageSize="10" />
  149. `,
  150. data() {
  151. return { trigger: false };
  152. }
  153. });
  154. expect(vm.trigger).to.false;
  155. setTimeout(_ => {
  156. vm.$el.querySelectorAll('li.el-select-dropdown__item')[1].click();
  157. setTimeout(_ => {
  158. expect(vm.trigger).to.true;
  159. done();
  160. }, 50);
  161. }, 50);
  162. });
  163. it('pageSize > total', () => {
  164. vm = createVue({
  165. template: `
  166. <el-pagination
  167. @current-change="handleChange"
  168. :page-size="1000"
  169. :total="0" />
  170. `,
  171. methods: {
  172. handleChange(val) {
  173. this.page = val;
  174. }
  175. },
  176. data() {
  177. return { page: 0 };
  178. }
  179. });
  180. const input = vm.$el.querySelector('.el-pagination__jump input');
  181. input.value = 1;
  182. triggerEvent(input, 'change');
  183. expect(vm.page).to.equal(0);
  184. input.value = '我好帅';
  185. triggerEvent(input, 'change');
  186. expect(vm.page).to.equal(0);
  187. });
  188. describe('click pager', () => {
  189. it('click ul', () => {
  190. vm = createTest(Pagination, {
  191. total: 1000
  192. }, true);
  193. vm.$el.querySelector('.el-pager').click();
  194. expect(vm.internalCurrentPage).to.equal(1);
  195. });
  196. it('click li', () => {
  197. vm = createTest(Pagination, {
  198. total: 1000
  199. }, true);
  200. vm.$el.querySelectorAll('.el-pager li.number')[1].click();
  201. expect(vm.internalCurrentPage).to.equal(2);
  202. });
  203. it('click next icon-more', () => {
  204. vm = createTest(Pagination, {
  205. total: 1000
  206. }, true);
  207. vm.$el.querySelector('.el-pager .more').click();
  208. expect(vm.internalCurrentPage).to.equal(6);
  209. });
  210. it('click prev icon-more', done => {
  211. vm = createTest(Pagination, {
  212. total: 1000
  213. }, true);
  214. vm.$el.querySelector('.btn-quicknext.more').click();
  215. setTimeout(_ => {
  216. expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
  217. vm.$el.querySelector('.btn-quickprev.more').click();
  218. expect(vm.internalCurrentPage).to.equal(1);
  219. done();
  220. }, 50);
  221. });
  222. it('click last page', done => {
  223. vm = createTest(Pagination, {
  224. total: 1000
  225. }, true);
  226. const nodes = vm.$el.querySelectorAll('li.number');
  227. nodes[nodes.length - 1].click();
  228. setTimeout(_ => {
  229. expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
  230. expect(vm.$el.querySelector('.btn-quicknext.more')).to.not.exist;
  231. done();
  232. }, 50);
  233. });
  234. });
  235. });