Nuxt/packages/vue-app/test/nuxt-link.client.prefetch.t...

154 lines
4.8 KiB
JavaScript
Raw Normal View History

/**
* @jest-environment jsdom
*/
import { mount, RouterLinkStub } from '@vue/test-utils'
import { vmTick, compileTemplate, importComponent } from './__utils__'
/* eslint-disable no-console */
describe('nuxt-link prefetch', () => {
beforeAll(() => {
jest.useFakeTimers()
jest.spyOn(console, 'warn')
jest.spyOn(console, 'error')
})
afterAll(() => jest.restoreAllMocks())
test('when router.prefetchLinks is set to false, link with no prop should not be prefetched',
async () => {
const compiledTemplatePath = await compileTemplate(
'components/nuxt-link.client.js',
'nuxt-link.client.prefetch.0.js',
{ router: { prefetchLinks: false } }
)
const Component = await importComponent(compiledTemplatePath)
const observe = jest.spyOn(Component.methods, 'observe')
Component.extends = RouterLinkStub
const wrapper = mount(Component, {
propsData: { to: '/link' }
})
jest.runAllTimers()
await vmTick(wrapper.vm)
expect(console.warn).not.toHaveBeenCalled()
expect(console.error).not.toHaveBeenCalled()
expect(wrapper.props('prefetch')).toBe(false)
expect(wrapper.props('noPrefetch')).toBe(false)
expect(observe).not.toHaveBeenCalled()
})
test('when router.prefetchLinks is set to false, link with prefetch prop set to true should be prefetched',
async () => {
const compiledTemplatePath = await compileTemplate(
'components/nuxt-link.client.js',
'nuxt-link.client.prefetch.1.js',
{ router: { prefetchLinks: false } }
)
const Component = await importComponent(compiledTemplatePath)
const observe = jest.spyOn(Component.methods, 'observe')
Component.extends = RouterLinkStub
const wrapper = mount(Component, {
propsData: { to: '/link', prefetch: true }
})
jest.runAllTimers()
await vmTick(wrapper.vm)
expect(console.warn).not.toHaveBeenCalled()
expect(console.error).not.toHaveBeenCalled()
expect(wrapper.props('prefetch')).toBe(true)
expect(wrapper.props('noPrefetch')).toBe(false)
expect(observe).toHaveBeenCalled()
})
test('when router.prefetchLinks is set to true (default), link with no prop should be prefetched',
async () => {
const compiledTemplatePath = await compileTemplate(
'components/nuxt-link.client.js',
'nuxt-link.client.prefetch.2.js',
{}
)
const Component = await importComponent(compiledTemplatePath)
const observe = jest.spyOn(Component.methods, 'observe')
Component.extends = RouterLinkStub
const wrapper = mount(Component, {
propsData: { to: '/link' }
})
jest.runAllTimers()
await vmTick(wrapper.vm)
expect(console.warn).not.toHaveBeenCalled()
expect(console.error).not.toHaveBeenCalled()
expect(wrapper.props('prefetch')).toBe(true)
expect(wrapper.props('noPrefetch')).toBe(false)
expect(observe).toHaveBeenCalled()
})
test('when router.prefetchLinks is set to true (default), link with prefetch prop set to false should not be prefetched',
async () => {
const compiledTemplatePath = await compileTemplate(
'components/nuxt-link.client.js',
'nuxt-link.client.prefetch.3.js',
{}
)
const Component = await importComponent(compiledTemplatePath)
const observe = jest.spyOn(Component.methods, 'observe')
Component.extends = RouterLinkStub
const wrapper = mount(Component, {
propsData: { to: '/link', prefetch: false }
})
jest.runAllTimers()
await vmTick(wrapper.vm)
expect(console.warn).not.toHaveBeenCalled()
expect(console.error).not.toHaveBeenCalled()
expect(wrapper.props('prefetch')).toBe(false)
expect(wrapper.props('noPrefetch')).toBe(false)
expect(observe).not.toHaveBeenCalled()
})
test('when router.prefetchLinks is set to true (default), link with noPrefetch prop should not be prefetched',
async () => {
const compiledTemplatePath = await compileTemplate(
'components/nuxt-link.client.js',
'nuxt-link.client.prefetch.4.js',
{}
)
const Component = await importComponent(compiledTemplatePath)
const observe = jest.spyOn(Component.methods, 'observe')
Component.extends = RouterLinkStub
const wrapper = mount(Component, {
propsData: { to: '/link', noPrefetch: true }
})
jest.runAllTimers()
await vmTick(wrapper.vm)
expect(console.warn).not.toHaveBeenCalled()
expect(console.error).not.toHaveBeenCalled()
expect(wrapper.props('prefetch')).toBe(true)
expect(wrapper.props('noPrefetch')).toBe(true)
expect(observe).not.toHaveBeenCalled()
})
})
/* eslint-enable no-console */