|
| 1 | +import { mountPcMode } from '@opentiny-internal/vue-test-utils' |
| 2 | +import { describe, expect, test, vi } from 'vitest' |
| 3 | +import Pager from '@opentiny/vue-pager' |
| 4 | +import { ref, nextTick } from 'vue' |
| 5 | + |
| 6 | +describe('PC Mode', () => { |
| 7 | + const mount = mountPcMode |
| 8 | + |
| 9 | + test('base 基本用法', () => { |
| 10 | + const wrapper = mount(() => <Pager layout="prev, pager, next"></Pager>) |
| 11 | + expect(wrapper.find('.tiny-pager__btn-prev').exists()).toBe(true) |
| 12 | + expect(wrapper.find('.tiny-pager__group').exists()).toBe(true) |
| 13 | + expect(wrapper.find('.tiny-pager__btn-next').exists()).toBe(true) |
| 14 | + }) |
| 15 | + |
| 16 | + test('current-change 当前页码发生改变时,触发current-change事件', async () => { |
| 17 | + const currentChange = vi.fn() |
| 18 | + const wrapper = mount(() => <Pager layout="prev, pager, next" onCurrentChange={currentChange} total={1000}></Pager>) |
| 19 | + const nextBtn = wrapper.find('.tiny-pager__btn-next') |
| 20 | + await nextBtn.trigger('click') |
| 21 | + expect(currentChange).toHaveBeenCalled() |
| 22 | + }) |
| 23 | + |
| 24 | + test('layout 自定义分页布局', () => { |
| 25 | + const SlotContent = () => <span>默认插槽</span> |
| 26 | + const wrapper = mount(() => ( |
| 27 | + <Pager layout="sizes,slot, prev, pager, next, jumper, ->, total" total={1000}> |
| 28 | + <SlotContent></SlotContent> |
| 29 | + </Pager> |
| 30 | + )) |
| 31 | + expect(wrapper.findComponent(SlotContent).exists()).toBe(true) |
| 32 | + }) |
| 33 | + |
| 34 | + describe('align 设置分页组件对齐方式', () => { |
| 35 | + ;['left', 'center', 'right'].forEach((align) => { |
| 36 | + test(`对齐方式为${align}`, () => { |
| 37 | + const wrapper = mount(() => <Pager align={align} />) |
| 38 | + expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: ${align}`) |
| 39 | + }) |
| 40 | + }) |
| 41 | + |
| 42 | + test('align 为响应式属性', async () => { |
| 43 | + const align = ref('left') |
| 44 | + const wrapper = mount(() => <Pager align={align.value} />) |
| 45 | + expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: left`) |
| 46 | + align.value = 'center' |
| 47 | + await nextTick() |
| 48 | + |
| 49 | + expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: center`) |
| 50 | + |
| 51 | + align.value = 'right' |
| 52 | + await nextTick() |
| 53 | + |
| 54 | + expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: right`) |
| 55 | + }) |
| 56 | + }) |
| 57 | + |
| 58 | + test.todo('number 设置分页组件为number渲染模式') |
| 59 | + test.todo('fixed 设置分页组件为fixed渲染模式') |
| 60 | + test.todo('simple 设置分页组件为simple渲染模式') |
| 61 | + test.todo('complete 设置分页组件为complete渲染模式') |
| 62 | + test.todo('page-count 设置分页组件的总页数') |
| 63 | + test.skip('size-change 每页条数改变时触发size-change事件', async () => { |
| 64 | + const sizeChange = vi.fn() |
| 65 | + const wrapper = mount(() => <Pager onSizeChange={sizeChange} total={100} mode="number" />) |
| 66 | + wrapper.find('.tiny-pager__page-size-btn').trigger('click') |
| 67 | + await nextTick() |
| 68 | + const selected = document.querySelector('.is-selected') |
| 69 | + selected?.nextElementSibling?.click() |
| 70 | + await nextTick() |
| 71 | + expect(sizeChange).toHaveBeenCalledWith(20) |
| 72 | + }) |
| 73 | + |
| 74 | + test.skip('prev-click 切换至前一页时触发prev-click事件', () => { |
| 75 | + const prevClick = vi.fn() |
| 76 | + const currentPage = ref(2) |
| 77 | + const wrapper = mount(() => <Pager onPrevClick={prevClick} currentPage={currentPage} />) |
| 78 | + wrapper.find('.tiny-pager__btn-prev').trigger('click') |
| 79 | + expect(prevClick).toHaveBeenCalledWith(1) |
| 80 | + }) |
| 81 | + |
| 82 | + test('next-click 切换至后一页时触发next-click事件', () => { |
| 83 | + const nextClick = vi.fn() |
| 84 | + const wrapper = mount(() => <Pager onNextClick={nextClick} />) |
| 85 | + wrapper.find('.tiny-pager__btn-next').trigger('click') |
| 86 | + expect(nextClick).toHaveBeenCalledWith(2) |
| 87 | + }) |
| 88 | + |
| 89 | + describe('before-page-change 切换分页前事件', () => { |
| 90 | + test('开启事件', () => { |
| 91 | + const beforePageChange = vi.fn() |
| 92 | + const wrapper = mount(() => <Pager onBeforePageChange={beforePageChange} isBeforePageChange pageSize={5} />) |
| 93 | + wrapper.find('.tiny-pager__btn-next').trigger('click') |
| 94 | + expect(beforePageChange).toHaveBeenCalled() |
| 95 | + }) |
| 96 | + |
| 97 | + test('默认禁用', () => { |
| 98 | + const beforePageChange = vi.fn() |
| 99 | + const wrapper = mount(() => <Pager onBeforePageChange={beforePageChange} pageSize={5} />) |
| 100 | + wrapper.find('.tiny-pager__btn-next').trigger('click') |
| 101 | + expect(beforePageChange).not.toHaveBeenCalled() |
| 102 | + }) |
| 103 | + }) |
| 104 | + |
| 105 | + test('popper-append-to-body 分页下拉框元素是否追加到body元素节点下', () => { |
| 106 | + const wrapper = mount(() => <Pager popperAppendToBody={false} layout="sizes" />) |
| 107 | + wrapper.find('.tiny-pager__page-size-btn').trigger('click') |
| 108 | + expect(wrapper.find('.tiny-pager__selector-body').exists()).toBe(true) |
| 109 | + }) |
| 110 | + |
| 111 | + test('popper-class 自定义分页下拉框的类名', () => { |
| 112 | + mount(() => <Pager popperClass="custom-pager" />) |
| 113 | + expect(document.querySelector('.custom-pager')).toBeDefined() |
| 114 | + }) |
| 115 | + |
| 116 | + test('pager-count 设置页码数量', () => { |
| 117 | + const wrapper = mount(() => <Pager pagerCount={10} total={1000} />) |
| 118 | + expect(wrapper.findAll('.tiny-pager__pages > li:not(.quicknext)')).toHaveLength(10) |
| 119 | + }) |
| 120 | + |
| 121 | + test('page-size 设置每页显示数量', () => { |
| 122 | + const wrapper = mount(() => <Pager mode="number" pageSize={100} />) |
| 123 | + expect(wrapper.find('.tiny-pager__page-size').text()).toBe('100') |
| 124 | + }) |
| 125 | + |
| 126 | + test('hide-on-single-page 只有一页时隐藏分页', () => { |
| 127 | + const wrapper = mount(() => <Pager hideOnSinglePage />) |
| 128 | + expect(wrapper.find('.tiny-pager').exists()).toBe(false) |
| 129 | + }) |
| 130 | + |
| 131 | + test('prev-text、next-text 自定义上下页按钮文本', () => { |
| 132 | + const wrapper = mount(() => <Pager prevText="上一页" nextText="下一页" />) |
| 133 | + expect(wrapper.find('.tiny-pager__btn-prev').text()).toBe('上一页') |
| 134 | + expect(wrapper.find('.tiny-pager__btn-next').text()).toBe('下一页') |
| 135 | + }) |
| 136 | + |
| 137 | + test.todo('Grid 表格分页,服务需要自行实现') |
| 138 | + |
| 139 | + test('size 定义分页尺寸大小,可选值有 mini', () => { |
| 140 | + const wrapper = mount(() => <Pager size="mini" />) |
| 141 | + expect(wrapper.find('.tiny-pager').classes()).toContain('tiny-pager--mini') |
| 142 | + }) |
| 143 | + |
| 144 | + test('disabled 禁用分页所有功能', () => { |
| 145 | + const wrapper = mount(() => <Pager disabled />) |
| 146 | + expect(wrapper.find('.tiny-pager').classes()).toContain('is-disabled') |
| 147 | + }) |
| 148 | +}) |
0 commit comments