pagination.spec.js 8.5 KB

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