import { mount } from '@vue/test-utils' import Vue from 'vue' import { asyncExpect } from '@/tests/utils' import Anchor from '..' const { Link } = Anchor describe('Anchor Render', () => { it('Anchor render perfectly', (done) => { const wrapper = mount({ render () { return ( ) }, }, { sync: false }) Vue.nextTick(() => { wrapper.find('a[href="#API"]').trigger('click') wrapper.vm.$refs.anchor.handleScroll() setTimeout(() => { expect(wrapper.vm.$refs.anchor.$data.activeLink).not.toBe(null) done() }, 1000) }) }) it('Anchor render perfectly for complete href - click', (done) => { const wrapper = mount({ render () { return ( ) }, }, { sync: false }) Vue.nextTick(() => { wrapper.find('a[href="http://www.example.com/#API"]').trigger('click') expect(wrapper.vm.$refs.anchor.$data.activeLink).toBe('http://www.example.com/#API') done() }) }) it('Anchor render perfectly for complete href - scroll', (done) => { const wrapper = mount({ render () { return (
Hello
) }, }, { sync: false, attachToDocument: true }) Vue.nextTick(() => { wrapper.vm.$refs.anchor.handleScroll() expect(wrapper.vm.$refs.anchor.$data.activeLink).toBe('http://www.example.com/#API') done() }) }) it('Anchor render perfectly for complete href - scrollTo', async () => { const scrollToSpy = jest.spyOn(window, 'scrollTo') const wrapper = mount({ render () { return (
Hello
) }, }, { sync: false, attachToDocument: true }) await asyncExpect(() => { wrapper.vm.$refs.anchor.handleScrollTo('##API') expect(wrapper.vm.$refs.anchor.$data.activeLink).toBe('##API') expect(scrollToSpy).not.toHaveBeenCalled() }) await asyncExpect(() => { expect(scrollToSpy).toHaveBeenCalled() }, 1000) }) it('should remove listener when unmount', async () => { const wrapper = mount({ render () { return ( ) }, }, { sync: false, attachToDocument: true }) await asyncExpect(() => { const removeListenerSpy = jest.spyOn(wrapper.vm.$refs.anchor.scrollEvent, 'remove') wrapper.destroy() expect(removeListenerSpy).toHaveBeenCalled() }) }) it('should unregister link when unmount children', async () => { const wrapper = mount({ props: { showLink: { type: Boolean, default: true, }, }, render () { return ( {this.showLink ? : null} ) }, }, { sync: false, attachToDocument: true }) await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#API']) wrapper.setProps({ showLink: false }) }) await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual([]) }) }) it('should update links when link href update', async () => { const wrapper = mount({ props: ['href'], render () { return }, }, { sync: false, attachToDocument: true, propsData: { href: '#API', }}) await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#API']) wrapper.setProps({ href: '#API_1' }) }) await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#API_1']) }) }) it('Anchor onClick event', () => { let event let link const handleClick = (...arg) => ([event, link] = arg) const href = '#API' const title = 'API' const wrapper = mount( { render () { return ( ) }, } ) wrapper.find(`a[href="${href}"]`).trigger('click') wrapper.vm.$refs.anchorRef.handleScroll() expect(event).not.toBe(undefined) expect(link).toEqual({ href, title }) }) })