import { mount } from '@vue/test-utils'; import { ref } from 'vue'; import Anchor from '..'; const { Link } = Anchor; let idCounter = 0; const getHashUrl = () => `Anchor-API-${idCounter++}`; describe('Anchor Render', () => { it('Anchor render perfectly', async done => { const hash = getHashUrl(); const anchor = ref(null); const activeLink = ref(null); const wrapper = mount( { render() { return ( { activeLink.value = current; }} > ); }, }, { sync: false }, ); wrapper.vm.$nextTick(() => { wrapper.find(`a[href="#${hash}`).trigger('click'); setTimeout(() => { expect(activeLink.value).not.toBe(hash); done(); }, 1000); }); }); it('Anchor render perfectly for complete href - click', async done => { const currentActiveLink = ref(null); const wrapper = mount( { render() { return ( { currentActiveLink.value = current; }} > ); }, }, { sync: false }, ); wrapper.vm.$nextTick(() => { wrapper.find('a[href="http://www.example.com/#API"]').trigger('click'); expect(currentActiveLink.value).toBe('http://www.example.com/#API'); done(); }); }); /* it('Anchor render perfectly for complete href - scroll', done => { const wrapper = mount( { render() { return (
Hello
); }, }, { sync: false, attachTo: 'body' }, ); wrapper.vm.$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, attachTo: 'body' }, ); 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, attachTo: 'body' }, ); await asyncExpect(() => { const removeListenerSpy = jest.spyOn(wrapper.vm.$refs.anchor.scrollEvent, 'remove'); wrapper.unmount(); 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, attachTo: 'body' }, ); 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, attachTo: 'body', props: { 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 anchorRef = Vue.ref(null); const wrapper = mount({ render() { return ( ); }, }); wrapper.find(`a[href="${href}"]`).trigger('click'); anchorRef.value.handleScroll(); expect(event).not.toBe(undefined); expect(link).toEqual({ href, title }); }); */ });