portfolio/src/app/__tests__/[slug].test.tsx

43 lines
1.3 KiB
TypeScript

import { render } from '@testing-library/react'
import meta from '@content/meta.json'
import projectMock from '../../../tests/__fixtures__/project.json'
import Page, { generateMetadata, generateStaticParams } from '../[slug]/page'
jest.mock('../../lib/getProjectBySlug', () => ({
getProjectBySlug: jest.fn().mockImplementation(() => projectMock)
}))
jest.mock('../../lib/getAllSlugs', () => ({
getAllSlugs: jest.fn().mockImplementationOnce(() => ['slug1', 'slug2'])
}))
describe('app: [slug]/page', () => {
it('renders correctly', async () => {
render(await Page({ params: { slug: 'slug' } }))
})
it('generateStaticParams()', async () => {
const slugs = await generateStaticParams()
expect(slugs).toEqual([{ slug: 'slug1' }, { slug: 'slug2' }])
})
it('generateMetadata()', async () => {
const metadata = await generateMetadata({
params: { slug: projectMock.slug }
})
expect(metadata).toEqual({
title: projectMock.title,
description: `${projectMock.description.slice(0, 157)}...`,
metadataBase: new URL(meta.url),
alternates: {
canonical: '/' + projectMock.slug
},
openGraph: {
url: '/' + projectMock.slug,
images: [{ url: projectMock.images[0].src }]
}
})
})
})