mirror of
https://gitee.com/wot-design-uni/wot-design-uni.git
synced 2025-12-07 01:28:30 +08:00
* chore: 🚀 引入vitest做组件测试 * chore: 🚀 引入vitest做组件测试 * chore: 🚀 update workflow * chore: 🚀 update workflow * chore: 🚀 update workflow * chore: 🚀 update workflow * chore: 🚀 update nodejs version * chore: 🚀 update nodejs version
136 lines
3.9 KiB
TypeScript
136 lines
3.9 KiB
TypeScript
import { mount } from '@vue/test-utils'
|
|
import WdSwiper from '@/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue'
|
|
import { describe, expect, test } from 'vitest'
|
|
import WdSwiperNav from '@/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue'
|
|
|
|
describe('WdSwiper', () => {
|
|
test('基本渲染', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
expect(wrapper.classes()).toContain('wd-swiper')
|
|
})
|
|
|
|
test('轮播项渲染', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }, { image: 'image3.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
|
|
// 检查 list 属性是否正确传递
|
|
expect((wrapper.vm as any).list.length).toBe(3)
|
|
|
|
// 在测试环境中,我们无法直接检查 swiper-item 的渲染,
|
|
// 因为它们是由 v-for 动态生成的,而测试环境不会执行这个逻辑
|
|
// 所以我们只检查 list 属性是否正确传递
|
|
})
|
|
|
|
test('自动播放', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
autoplay: true,
|
|
interval: 3000,
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
expect((wrapper.vm as any).autoplay).toBe(true)
|
|
expect((wrapper.vm as any).interval).toBe(3000)
|
|
})
|
|
|
|
test('指示器显示', async () => {
|
|
// 创建模拟的 wd-swiper-nav 组件
|
|
const mockSwiperNav = {
|
|
name: 'wd-swiper-nav',
|
|
template: '<div class="wd-swiper-nav"><div v-for="i in total" :key="i" class="wd-swiper__indicator"></div></div>',
|
|
props: ['type', 'current', 'total', 'direction', 'indicatorPosition', 'minShowNum', 'showControls'],
|
|
emits: ['change']
|
|
}
|
|
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
indicator: true, // 注意:属性名应该是 indicator 而不是 showIndicator
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': mockSwiperNav
|
|
}
|
|
}
|
|
})
|
|
|
|
// 检查 indicator 属性是否正确传递
|
|
expect((wrapper.vm as any).indicator).toBe(true)
|
|
|
|
// 检查 list 属性是否正确传递
|
|
expect((wrapper.vm as any).list.length).toBe(2)
|
|
|
|
// 在测试环境中,我们无法直接检查指示器的渲染,
|
|
// 因为它们是由条件渲染生成的,而测试环境不会执行这个逻辑
|
|
// 所以我们只检查相关属性是否正确传递
|
|
})
|
|
|
|
test('垂直方向', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
direction: 'vertical',
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
|
|
// 检查 direction 属性是否正确传递
|
|
expect((wrapper.vm as any).direction).toBe('vertical')
|
|
})
|
|
|
|
test('循环播放', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
loop: true,
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
expect((wrapper.vm as any).loop).toBe(true)
|
|
})
|
|
|
|
test('切换事件', async () => {
|
|
const wrapper = mount(WdSwiper, {
|
|
props: {
|
|
list: [{ image: 'image1.jpg' }, { image: 'image2.jpg' }]
|
|
},
|
|
global: {
|
|
components: {
|
|
'wd-swiper-nav': WdSwiperNav
|
|
}
|
|
}
|
|
})
|
|
wrapper.vm.$emit('change', { current: 1, source: 'touch' })
|
|
const emitted = wrapper.emitted() as Record<string, any[]>
|
|
expect(emitted['change']).toBeTruthy()
|
|
expect(emitted['change'][0][0]).toEqual({ current: 1, source: 'touch' })
|
|
})
|
|
})
|