import { mount } from '@vue/test-utils' import { nextTick } from 'vue' import Carousel from '../src/main.vue' import CarouselItem from '../src/item.vue' const wait = (ms = 100) => new Promise(resolve => setTimeout(() => resolve(), ms)) const _mount = (template: string, data?: () => void, methods?: any) => mount({ components: { 'el-carousel': Carousel, 'el-carousel-item': CarouselItem, }, template, data, methods, }) describe('Carousel', () => { it('create', () => { const wrapper = _mount( `
`, ) expect(wrapper.vm.$refs.carousel.direction).toBe('horizontal') expect(wrapper.findAll('.el-carousel__item').length).toEqual(3) }) it('auto play', async done => { const wrapper = _mount(`
`) await nextTick() await wait(10) const items = wrapper.vm.$el.querySelectorAll('.el-carousel__item') expect(items[0].classList.contains('is-active')).toBeTruthy() await wait(60) expect(items[1].classList.contains('is-active')).toBeTruthy() done() }) it('initial index', async done => { const wrapper = _mount(`
`) await nextTick() await wait(10) expect( wrapper.vm.$el .querySelectorAll('.el-carousel__item')[1] .classList.contains('is-active'), ).toBeTruthy() done() }) it('reset timer', async done => { const wrapper = _mount(`
`) await nextTick() const items = wrapper.vm.$el.querySelectorAll('.el-carousel__item') await wrapper.trigger('mouseenter') await nextTick() expect(items[0].classList.contains('is-active')).toBeTruthy() await wrapper.trigger('mouseleave') await nextTick() await wait(700) expect(items[1].classList.contains('is-active')).toBeTruthy() done() }) it('change', async done => { const wrapper = _mount( `
`, () => { return { val: -1, oldVal: -1, } }, { handleChange(val, oldVal) { this.val = val this.oldVal = oldVal }, }, ) await nextTick() await wait(50) expect(wrapper.vm.val).toBe(1) expect(wrapper.vm.oldVal).toBe(0) done() }) it('label', async done => { const wrapper = _mount(`
`) await nextTick() expect(wrapper.find('.el-carousel__button span').text()).toBe('1') done() }) describe('manual control', () => { it('hover', async done => { const wrapper = _mount(`
`) await nextTick() await wait() await wrapper.findAll('.el-carousel__indicator')[1].trigger('mouseenter') await nextTick() await wait() expect( wrapper.vm.$el .querySelectorAll('.el-carousel__item')[1] .classList.contains('is-active'), ).toBeTruthy() done() }) }) it('card', async done => { const wrapper = _mount(`
`) await nextTick() await wait() const items = wrapper.vm.$el.querySelectorAll('.el-carousel__item') expect(items[0].classList.contains('is-active')).toBeTruthy() expect(items[1].classList.contains('is-in-stage')).toBeTruthy() expect(items[6].classList.contains('is-in-stage')).toBeTruthy() await items[1].click() await wait() expect(items[1].classList.contains('is-active')).toBeTruthy() await wrapper.vm.$el.querySelector('.el-carousel__arrow--left').click() await wait() expect(items[0].classList.contains('is-active')).toBeTruthy() await items[6].click() await wait() expect(items[6].classList.contains('is-active')).toBeTruthy() done() }) it('vertical direction', () => { const wrapper = _mount(`
`) const items = wrapper.vm.$el.querySelectorAll('.el-carousel__item') expect(wrapper.vm.$refs.carousel.direction).toBe('vertical') expect(items[0].style.transform.indexOf('translateY') !== -1).toBeTruthy() }) it('pause auto play on hover', async done => { const wrapper = _mount(`
`) await nextTick() await wrapper.find('.el-carousel').trigger('mouseenter') const items = wrapper.vm.$el.querySelectorAll('.el-carousel__item') await nextTick() await wait(60) expect(items[1].classList.contains('is-active')).toBeTruthy() done() }) })