rsnext/test/unit/eslint-plugin-next/no-duplicate-head.test.ts

141 lines
3.3 KiB
TypeScript
Raw Normal View History

import rule from '@next/eslint-plugin-next/lib/rules/no-duplicate-head'
import { RuleTester } from 'eslint'
;(RuleTester as any).setDefaultConfig({
2021-07-15 20:04:17 +02:00
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
modules: true,
jsx: true,
},
},
})
const ruleTester = new RuleTester()
2021-07-15 20:04:17 +02:00
ruleTester.run('no-duplicate-head', rule, {
valid: [
{
code: `import Document, { Html, Head, Main, NextScript } from 'next/document'
class MyDocument extends Document {
static async getInitialProps(ctx) {
//...
}
2021-07-15 20:04:17 +02:00
render() {
return (
<Html>
<Head/>
</Html>
)
}
}
2021-07-15 20:04:17 +02:00
export default MyDocument
`,
filename: 'pages/_document.js',
},
{
code: `import Document, { Html, Head, Main, NextScript } from 'next/document'
class MyDocument extends Document {
2021-07-15 20:04:17 +02:00
render() {
return (
<Html>
<Head>
<meta charSet="utf-8" />
<link
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap"
rel="stylesheet"
/>
</Head>
</Html>
)
}
}
2021-07-15 20:04:17 +02:00
export default MyDocument
`,
filename: 'pages/_document.tsx',
},
],
invalid: [
{
code: `
import Document, { Html, Main, NextScript } from 'next/document'
import Head from 'next/head'
2021-07-15 20:04:17 +02:00
class MyDocument extends Document {
render() {
return (
<Html>
<Head />
<Head />
<Head />
</Html>
)
}
}
2021-07-15 20:04:17 +02:00
export default MyDocument
`,
filename: 'pages/_document.js',
errors: [
{
message:
'Do not include multiple instances of `<Head/>`. See: https://nextjs.org/docs/messages/no-duplicate-head',
2021-07-15 20:04:17 +02:00
type: 'JSXElement',
},
{
message:
'Do not include multiple instances of `<Head/>`. See: https://nextjs.org/docs/messages/no-duplicate-head',
2021-07-15 20:04:17 +02:00
type: 'JSXElement',
},
],
},
{
code: `
import Document, { Html, Main, NextScript } from 'next/document'
import Head from 'next/head'
2021-07-15 20:04:17 +02:00
class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<meta charSet="utf-8" />
<link
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap"
rel="stylesheet"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
<Head>
<script
dangerouslySetInnerHTML={{
__html: '',
}}
/>
</Head>
</Html>
)
}
}
2021-07-15 20:04:17 +02:00
export default MyDocument
`,
filename: 'pages/_document.page.tsx',
errors: [
{
message:
'Do not include multiple instances of `<Head/>`. See: https://nextjs.org/docs/messages/no-duplicate-head',
2021-07-15 20:04:17 +02:00
type: 'JSXElement',
},
],
},
],
})