123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491 |
- import { createTest, createVue, triggerEvent, destroyVM } from '../util';
- import Pagination from 'packages/pagination';
- describe('Pagination', () => {
- let vm;
- afterEach(() => {
- destroyVM(vm);
- });
- it('create', () => {
- vm = createTest(Pagination);
- const elm = vm.$el;
- // prev
- expect(elm.querySelector('button.btn-prev')).to.exist;
- // pager
- expect(elm.querySelector('ul.el-pager')).to.exist;
- // next
- expect(elm.querySelector('button.btn-next')).to.exist;
- // jumper
- expect(elm.querySelector('.el-pagination__jump')).to.exist;
- // ->
- expect(elm.querySelector('.el-pagination__rightwrapper')).to.exist;
- });
- it('set layout', () => {
- vm = createTest(Pagination, {
- layout: 'prev, pager, next'
- });
- const elm = vm.$el;
- // prev
- expect(elm.querySelector('button.btn-prev')).to.exist;
- // pager
- expect(elm.querySelector('ul.el-pager')).to.exist;
- // next
- expect(elm.querySelector('button.btn-next')).to.exist;
- // not found jumper
- expect(elm.querySelector('.el-pagination__jump')).to.not.exist;
- // not found ->
- expect(elm.querySelector('.el-pagination__rightwrapper')).to.not.exist;
- // not found total
- expect(elm.querySelector('.el-pagination__total')).to.not.exist;
- });
- it('layout: all in right, need clear float', () => {
- vm = createTest(Pagination, {
- layout: '->, prev, pager, next',
- total: 100
- }, true);
- const elm = vm.$el;
- let right_div = elm.querySelector('.el-pagination__rightwrapper');
- expect(elm.clientHeight > 0 && right_div.clientHeight > 0).to.equal(true);
- // elm 将来 padding 可能会变化, 所以使用 >= 来判定
- expect(elm.clientHeight >= right_div.clientHeight).to.equal(true);
- });
- it('custom slot', () => {
- vm = createVue({
- template: `
- <el-pagination
- layout="slot, prev, pager, next"
- :page-size="25"
- :total="100">
- <span class="slot-test">slot test</span>
- </el-pagination>
- `
- });
- expect(vm.$el.querySelector('.slot-test')).to.exist;
- });
- it('small', () => {
- vm = createTest(Pagination, {
- small: true
- });
- expect(vm.$el.classList.contains('el-pagination--small')).to.true;
- });
- it('pageSize', () => {
- vm = createTest(Pagination, {
- pageSize: 25,
- total: 100
- });
- expect(vm.$el.querySelectorAll('li.number')).to.length(4);
- });
- it('pageSize: NaN', () => {
- vm = createTest(Pagination, {
- pageSize: NaN,
- total: 100
- });
- const pagers = vm.$el.querySelectorAll('li.number');
- expect(pagers).to.length(7);
- });
- it('pageCount', () => {
- const vm = createTest(Pagination, {
- pageSize: 25,
- pageCount: 4
- });
- expect(vm.$el.querySelectorAll('li.number')).to.length(4);
- });
- it('pagerCount', () => {
- const vm = createTest(Pagination, {
- pageSize: 25,
- total: 1000,
- pagerCount: 21
- });
- expect(vm.$el.querySelectorAll('li.number')).to.length(21);
- });
- it('will work without total & page-count', (done) => {
- const vm = createTest(Pagination, {
- pageSize: 25,
- currentPage: 2
- });
- vm.$el.querySelector('.btn-prev').click();
- setTimeout(() => {
- vm.internalCurrentPage.should.be.equal(1);
- vm.$el.querySelector('.btn-prev').click();
- vm.internalCurrentPage.should.be.equal(1);
- done();
- }, 20);
- });
- it('currentPage', () => {
- vm = createTest(Pagination, {
- pageSize: 20,
- total: 200,
- currentPage: 3
- });
- expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('3');
- });
- it('currentPage: NaN', () => {
- vm = createTest(Pagination, {
- pageSize: 20,
- total: 200,
- currentPage: NaN
- });
- expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('1');
- expect(vm.$el.querySelectorAll('li.number')).to.length(7);
- });
- it('set currentPage & total', (done) => {
- vm = createVue({
- template: `
- <el-pagination
- @current-change="handleChange"
- :current-page="currentPage"
- :page-size="10"
- :total="100" />
- `,
- methods: {
- handleChange(val) {
- this.currentPage = val;
- this.page = val;
- },
- resetTotal() {
- this.total = 30;
- this.currentPage = 1;
- }
- },
- data() {
- return {
- currentPage: 10
- };
- }
- }, true);
- expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('10');
- vm.resetTotal();
- setTimeout(() => {
- expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('1');
- done();
- }, 50);
- });
- it('pageSizes', () => {
- vm = createTest(Pagination, {
- pageSizes: [10, 15, 35, 50],
- pageSize: 35,
- total: 1000,
- layout: 'sizes, prev, pager, next'
- });
- expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('35');
- expect([].slice.call(vm.$el.querySelectorAll('.el-select-dropdown__item'))
- .map(node => parseInt(node.textContent, 10)))
- .to.deep.equal([10, 15, 35, 50]);
- });
- it('pageSizes:not found pageSize', () => {
- vm = createTest(Pagination, {
- pageSizes: [10, 15, 35, 50],
- pageSize: 24,
- total: 1000,
- layout: 'sizes, prev, pager, next'
- });
- expect(vm.$el.querySelector('.el-select-dropdown__item.selected')).to.property('textContent').include('10');
- });
- it('layout is empty', () => {
- vm = createTest(Pagination, {
- layout: ''
- });
- expect(vm.$el.textContent).to.empty;
- });
- it('jumper: change value', (done) => {
- vm = createVue({
- template: `
- <el-pagination
- @current-change="handleChange"
- :page-size="10"
- layout="pager, jumper"
- :total="100" />
- `,
- methods: {
- handleChange(val) {
- this.page = val;
- }
- },
- data() {
- return {
- page: 1,
- inputer: null
- };
- },
- mounted() {
- this.inputer = this.$children[0].$children[1].$children[0];
- }
- }, true);
- const input = vm.inputer;
- const changeValue = (value) => {
- input.$emit('input', value);
- input.$emit('change', value);
- };
- changeValue(1);
- setTimeout(() => {
- expect(input.value).to.equal(1);
- // 多次输入不在min-max区间内的数字
- changeValue(0);
- setTimeout(() => {
- expect(input.value).to.equal(1);
- changeValue(0);
- setTimeout(() => {
- expect(input.value).to.equal(1);
- changeValue(1000);
- setTimeout(() => {
- expect(input.value).to.equal(10);
- changeValue(1000);
- setTimeout(() => {
- expect(input.value).to.equal(10);
- done();
- }, 50);
- }, 50);
- }, 50);
- }, 50);
- }, 50);
- });
- it('event:current-change', (done) => {
- vm = createVue({
- template: `
- <el-pagination
- :total="1000"
- @current-change="change = true" />
- `,
- data() {
- return { change: false };
- }
- });
- const next = vm.$el.querySelector('button.btn-next');
- const prev = vm.$el.querySelector('button.btn-prev');
- expect(vm.change).to.false;
- // click 9
- let count = 9;
- while (--count) {
- next.click();
- }
- prev.click();
- setTimeout(() => {
- expect(vm.change).to.true;
- done();
- }, 50);
- });
- it('event:current-change after current page is manually updated', (done) => {
- vm = createVue({
- template: `
- <el-pagination
- :total="15"
- :current-page.sync="currentPage"
- @current-change="emitCount++" />
- `,
- data() {
- return {
- emitCount: 0,
- currentPage: 1
- };
- }
- });
- const next = vm.$el.querySelector('button.btn-next');
- next.click();
- setTimeout(() => {
- expect(vm.emitCount).to.equal(1);
- vm.currentPage = 1;
- setTimeout(() => {
- expect(vm.emitCount).to.equal(1);
- next.click();
- setTimeout(() => {
- expect(vm.emitCount).to.equal(2);
- done();
- }, 50);
- }, 50);
- }, 50);
- });
- it('event:size-change', done => {
- vm = createVue({
- template: `
- <el-pagination
- :total="100"
- layout="sizes, prev, pager, next"
- @size-change="trigger = true"
- :pageSize="10" />
- `,
- data() {
- return { trigger: false };
- }
- }, true);
- expect(vm.trigger).to.false;
- setTimeout(_ => {
- vm.$el.querySelectorAll('li.el-select-dropdown__item')[1].click();
- setTimeout(_ => {
- expect(vm.trigger).to.true;
- done();
- }, 50);
- }, 50);
- });
- it('event: prev and next click', done => {
- vm = createVue({
- template: `
- <el-pagination
- :total="100"
- layout="sizes, prev, pager, next"
- @prev-click="trigger = true"
- @next-click="trigger = true"
- :pageSize="10" />
- `,
- data() {
- return { trigger: false };
- }
- }, true);
- const prev = vm.$el.querySelector('.btn-prev');
- const next = vm.$el.querySelector('.btn-next');
- prev.click();
- setTimeout(_ => {
- expect(vm.trigger).to.false;
- next.click();
- setTimeout(_ => {
- expect(vm.trigger).to.true;
- done();
- }, 50);
- }, 50);
- });
- it('pageSize > total', () => {
- vm = createVue({
- template: `
- <el-pagination
- @current-change="handleChange"
- :page-size="1000"
- :total="0" />
- `,
- methods: {
- handleChange(val) {
- this.page = val;
- }
- },
- data() {
- return { page: 1 };
- }
- });
- const input = vm.$el.querySelector('.el-pagination__jump input');
- input.value = 2;
- triggerEvent(input, 'change');
- expect(vm.page).to.equal(1);
- input.value = '我好帅';
- triggerEvent(input, 'change');
- expect(vm.page).to.equal(1);
- });
- it('hideOnSinglePage', () => {
- vm = createVue({
- template: `
- <el-pagination
- hide-on-single-page
- :total="1" />
- `
- });
- expect(vm.$el.nodeType).to.be.equal(window.Node.COMMENT_NODE);
- });
- describe('click pager', () => {
- it('click ul', () => {
- vm = createTest(Pagination, {
- total: 1000
- }, true);
- vm.$el.querySelector('.el-pager').click();
- expect(vm.internalCurrentPage).to.equal(1);
- });
- it('click li', () => {
- vm = createTest(Pagination, {
- total: 1000
- }, true);
- vm.$el.querySelectorAll('.el-pager li.number')[1].click();
- expect(vm.internalCurrentPage).to.equal(2);
- });
- it('click next icon-more', () => {
- vm = createTest(Pagination, {
- total: 1000
- }, true);
- vm.$el.querySelector('.el-pager .more').click();
- expect(vm.internalCurrentPage).to.equal(6);
- });
- it('click prev icon-more', done => {
- vm = createTest(Pagination, {
- total: 1000
- }, true);
- vm.$el.querySelector('.btn-quicknext.more').click();
- setTimeout(_ => {
- expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
- vm.$el.querySelector('.btn-quickprev.more').click();
- expect(vm.internalCurrentPage).to.equal(1);
- done();
- }, 50);
- });
- it('click last page', done => {
- vm = createTest(Pagination, {
- total: 1000
- }, true);
- const nodes = vm.$el.querySelectorAll('li.number');
- nodes[nodes.length - 1].click();
- setTimeout(_ => {
- expect(vm.$el.querySelector('.btn-quickprev.more')).to.exist;
- expect(vm.$el.querySelector('.btn-quicknext.more')).to.not.exist;
- done();
- }, 50);
- });
- });
- });
|