pagination.spec.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  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. });
  22. it('set layout', () => {
  23. vm = createTest(Pagination, {
  24. layout: 'prev, pager, next'
  25. });
  26. const elm = vm.$el;
  27. // prev
  28. expect(elm.querySelector('button.btn-prev')).to.exist;
  29. // pager
  30. expect(elm.querySelector('ul.el-pager')).to.exist;
  31. // next
  32. expect(elm.querySelector('button.btn-next')).to.exist;
  33. // not found jumper
  34. expect(elm.querySelector('.el-pagination__jump')).to.not.exist;
  35. // not found ->
  36. expect(elm.querySelector('.el-pagination__rightwrapper')).to.not.exist;
  37. // not found total
  38. expect(elm.querySelector('.el-pagination__total')).to.not.exist;
  39. });
  40. it('small', () => {
  41. vm = createTest(Pagination, {
  42. small: true
  43. });
  44. expect(vm.$el.classList.contains('el-pagination--small')).to.true;
  45. });
  46. it('pageSize', () => {
  47. vm = createTest(Pagination, {
  48. pageSize: 25,
  49. total: 100
  50. });
  51. expect(vm.$el.querySelectorAll('li.number')).to.length(4);
  52. });
  53. it('pageCount', () => {
  54. const vm = createTest(Pagination, {
  55. pageSize: 25,
  56. pageCount: 4
  57. });
  58. expect(vm.$el.querySelectorAll('li.number')).to.length(4);
  59. });
  60. it('will work without total & page-count', (done) => {
  61. const vm = createTest(Pagination, {
  62. pageSize: 25,
  63. currentPage: 2
  64. });
  65. vm.$el.querySelector('.btn-prev').click();
  66. setTimeout(() => {
  67. vm.internalCurrentPage.should.be.equal(1);
  68. vm.$el.querySelector('.btn-prev').click();
  69. vm.internalCurrentPage.should.be.equal(1);
  70. done();
  71. }, 20);
  72. });
  73. it('currentPage', () => {
  74. vm = createTest(Pagination, {
  75. pageSize: 20,
  76. total: 200,
  77. currentPage: 3
  78. });
  79. expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('3');
  80. });
  81. it('set currentPage & total', (done) => {
  82. vm = createVue({
  83. template: `
  84. <el-pagination
  85. @current-change="handleChange"
  86. :current-page="currentPage"
  87. :page-size="10"
  88. :total="100" />
  89. `,
  90. methods: {
  91. handleChange(val) {
  92. this.currentPage = val;
  93. this.page = val;
  94. },
  95. resetTotal() {
  96. this.total = 30;
  97. this.currentPage = 1;
  98. }
  99. },
  100. data() {
  101. return {
  102. currentPage: 10
  103. };
  104. }
  105. }, true);
  106. expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('10');
  107. vm.resetTotal();
  108. setTimeout(() => {
  109. expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('1');
  110. done();
  111. }, 50);
  112. });
  113. it('pageSizes', () => {
  114. vm = createTest(Pagination, {
  115. pageSizes: [10, 15, 35, 50],
  116. pageSize: 35,
  117. total: 1000,
  118. layout: 'sizes, prev, pager, next'
  119. });
  120. expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('35');
  121. expect([].slice.call(vm.$el.querySelectorAll('.el-select-dropdown__item'))
  122. .map(node => parseInt(node.textContent, 10)))
  123. .to.deep.equal([10, 15, 35, 50]);
  124. });
  125. it('pageSizes:not found pageSize', () => {
  126. vm = createTest(Pagination, {
  127. pageSizes: [10, 15, 35, 50],
  128. pageSize: 24,
  129. total: 1000,
  130. layout: 'sizes, prev, pager, next'
  131. });
  132. expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('10');
  133. });
  134. it('layout is empty', () => {
  135. vm = createTest(Pagination, {
  136. layout: ''
  137. });
  138. expect(vm.$el.textContent).to.empty;
  139. });
  140. it('jumper: change value', (done) => {
  141. vm = createVue({
  142. template: `
  143. <el-pagination
  144. @current-change="handleChange"
  145. :page-size="10"
  146. :total="100" />
  147. `,
  148. methods: {
  149. handleChange(val) {
  150. this.page = val;
  151. }
  152. },
  153. data() {
  154. return { page: 1 };
  155. }
  156. }, true);
  157. const input = vm.$el.querySelector('.el-pagination__jump input');
  158. input.focus();
  159. input.value = -1;
  160. triggerEvent(input, 'change');
  161. setTimeout(() => {
  162. expect(vm.page).to.equal(1);
  163. input.value = 10000;
  164. triggerEvent(input, 'change');
  165. setTimeout(() => {
  166. expect(vm.page).to.equal(10);
  167. input.value = '我好帅';
  168. triggerEvent(input, 'change');
  169. setTimeout(() => {
  170. expect(vm.page).to.equal(1);
  171. done();
  172. }, 50);
  173. }, 50);
  174. }, 50);
  175. });
  176. it('event:current-change', (done) => {
  177. vm = createVue({
  178. template: `
  179. <el-pagination
  180. :total="1000"
  181. @current-change="change = true" />
  182. `,
  183. data() {
  184. return { change: false };
  185. }
  186. });
  187. const next = vm.$el.querySelector('button.btn-next');
  188. const prev = vm.$el.querySelector('button.btn-prev');
  189. expect(vm.change).to.false;
  190. // click 9
  191. let count = 9;
  192. while (--count) {
  193. next.click();
  194. }
  195. prev.click();
  196. setTimeout(() => {
  197. expect(vm.change).to.true;
  198. done();
  199. }, 50);
  200. });
  201. it('event:size-change', done => {
  202. vm = createVue({
  203. template: `
  204. <el-pagination
  205. :total="100"
  206. layout="sizes, prev, pager, next"
  207. @size-change="trigger = true"
  208. :pageSize="10" />
  209. `,
  210. data() {
  211. return { trigger: false };
  212. }
  213. }, true);
  214. expect(vm.trigger).to.false;
  215. setTimeout(_ => {
  216. vm.$el.querySelectorAll('li.el-select-dropdown__item')[1].click();
  217. setTimeout(_ => {
  218. expect(vm.trigger).to.true;
  219. done();
  220. }, 50);
  221. }, 50);
  222. });
  223. it('pageSize > total', () => {
  224. vm = createVue({
  225. template: `
  226. <el-pagination
  227. @current-change="handleChange"
  228. :page-size="1000"
  229. :total="0" />
  230. `,
  231. methods: {
  232. handleChange(val) {
  233. this.page = val;
  234. }
  235. },
  236. data() {
  237. return { page: 1 };
  238. }
  239. });
  240. const input = vm.$el.querySelector('.el-pagination__jump input');
  241. input.value = 2;
  242. triggerEvent(input, 'change');
  243. expect(vm.page).to.equal(1);
  244. input.value = '我好帅';
  245. triggerEvent(input, 'change');
  246. expect(vm.page).to.equal(1);
  247. });
  248. describe('click pager', () => {
  249. it('click ul', () => {
  250. vm = createTest(Pagination, {
  251. total: 1000
  252. }, true);
  253. vm.$el.querySelector('.el-pager').click();
  254. expect(vm.internalCurrentPage).to.equal(1);
  255. });
  256. it('click li', () => {
  257. vm = createTest(Pagination, {
  258. total: 1000
  259. }, true);
  260. vm.$el.querySelectorAll('.el-pager li.number')[1].click();
  261. expect(vm.internalCurrentPage).to.equal(2);
  262. });
  263. it('click next icon-more', () => {
  264. vm = createTest(Pagination, {
  265. total: 1000
  266. }, true);
  267. vm.$el.querySelector('.el-pager .more').click();
  268. expect(vm.internalCurrentPage).to.equal(6);
  269. });
  270. it('click prev icon-more', done => {
  271. vm = createTest(Pagination, {
  272. total: 1000
  273. }, true);
  274. vm.$el.querySelector('.btn-quicknext.more').click();
  275. setTimeout(_ => {
  276. expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
  277. vm.$el.querySelector('.btn-quickprev.more').click();
  278. expect(vm.internalCurrentPage).to.equal(1);
  279. done();
  280. }, 50);
  281. });
  282. it('click last page', done => {
  283. vm = createTest(Pagination, {
  284. total: 1000
  285. }, true);
  286. const nodes = vm.$el.querySelectorAll('li.number');
  287. nodes[nodes.length - 1].click();
  288. setTimeout(_ => {
  289. expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
  290. expect(vm.$el.querySelector('.btn-quicknext.more')).to.not.exist;
  291. done();
  292. }, 50);
  293. });
  294. });
  295. });