rsnext/test/unit/eslint-plugin-next/no-async-client-component.test.ts
Jiachi Liu f4b947fb56
Fix eslint async client component (#51952)
Fixes #51917 

It's throwing error in arrow function, should also be covered in the
lint rule
fix NEXT-1326
2023-06-28 20:03:32 -07:00

164 lines
2.5 KiB
TypeScript

import rule from '@next/eslint-plugin-next/dist/rules/no-async-client-component'
import { RuleTester } from 'eslint'
;(RuleTester as any).setDefaultConfig({
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
modules: true,
jsx: true,
},
},
})
const ruleTester = new RuleTester()
const message =
'Prevent client components from being async functions. See: https://nextjs.org/docs/messages/no-async-client-component'
ruleTester.run('no-async-client-component single line', rule, {
valid: [
`
export default async function MyComponent() {
return <></>
}
`,
],
invalid: [
{
code: `
"use client"
export default async function MyComponent() {
return <></>
}
`,
errors: [
{
message,
},
],
},
],
})
ruleTester.run('no-async-client-component single line capitalization', rule, {
valid: [
`
"use client"
export default async function myFunction() {
return ''
}
`,
],
invalid: [
{
code: `
"use client"
export default async function MyFunction() {
return ''
}
`,
errors: [
{
message,
},
],
},
],
})
ruleTester.run('no-async-client-component multiple line', rule, {
valid: [
`
async function MyComponent() {
return <></>
}
export default MyComponent
`,
],
invalid: [
{
code: `
"use client"
async function MyComponent() {
return <></>
}
export default MyComponent
`,
errors: [
{
message,
},
],
},
],
})
ruleTester.run('no-async-client-component multiple line capitalization', rule, {
valid: [
`
"use client"
async function myFunction() {
return ''
}
export default myFunction
`,
],
invalid: [
{
code: `
"use client"
async function MyFunction() {
return ''
}
export default MyFunction
`,
errors: [
{
message,
},
],
},
],
})
ruleTester.run('no-async-client-component arrow function', rule, {
valid: [
`
"use client"
const myFunction = () => {
return ''
}
export default myFunction
`,
],
invalid: [
{
code: `
"use client"
const MyFunction = async () => {
return '123'
}
export default MyFunction
`,
errors: [
{
message,
},
],
},
],
})