Path: blob/main/tests/src/rules/prefer-default-export.js
829 views
import { test, getNonDefaultParsers } from '../utils';12import { RuleTester } from 'eslint';34const ruleTester = new RuleTester();5const rule = require('../../../src/rules/prefer-default-export');67ruleTester.run('prefer-default-export', rule, {8valid: [9test({10code: `11export const foo = 'foo';12export const bar = 'bar';`,13}),14test({15code: `16export default function bar() {};`,17}),18test({19code: `20export const foo = 'foo';21export function bar() {};`,22}),23test({24code: `25export const foo = 'foo';26export default bar;`,27}),28test({29code: `30let foo, bar;31export { foo, bar }`,32}),33test({34code: `35export const { foo, bar } = item;`,36}),37test({38code: `39export const { foo, bar: baz } = item;`,40}),41test({42code: `43export const { foo: { bar, baz } } = item;`,44}),45test({46code: `47export const [a, b] = item;`,48}),49test({50code: `51let item;52export const foo = item;53export { item };`,54}),55test({56code: `57let foo;58export { foo as default }`,59}),60test({61code: `62export * from './foo';`,63}),64test({65code: `export Memory, { MemoryValue } from './Memory'`,66parser: require.resolve('babel-eslint'),67}),6869// no exports at all70test({71code: `72import * as foo from './foo';`,73}),7475test({76code: `export type UserId = number;`,77parser: require.resolve('babel-eslint'),78}),7980// issue #65381test({82code: 'export default from "foo.js"',83parser: require.resolve('babel-eslint'),84}),85test({86code: 'export { a, b } from "foo.js"',87parser: require.resolve('babel-eslint'),88}),89// ...SYNTAX_CASES,90test({91code: `92export const [CounterProvider,, withCounter] = func();;93`,94parser: require.resolve('babel-eslint'),95}),96],97invalid: [98test({99code: `100export function bar() {};`,101errors: [{102type: 'ExportNamedDeclaration',103message: 'Prefer default export.',104}],105}),106test({107code: `108export const foo = 'foo';`,109errors: [{110type: 'ExportNamedDeclaration',111message: 'Prefer default export.',112}],113}),114test({115code: `116const foo = 'foo';117export { foo };`,118errors: [{119type: 'ExportSpecifier',120message: 'Prefer default export.',121}],122}),123test({124code: `125export const { foo } = { foo: "bar" };`,126errors: [{127type: 'ExportNamedDeclaration',128message: 'Prefer default export.',129}],130}),131test({132code: `133export const { foo: { bar } } = { foo: { bar: "baz" } };`,134errors: [{135type: 'ExportNamedDeclaration',136message: 'Prefer default export.',137}],138}),139test({140code: `141export const [a] = ["foo"]`,142errors: [{143type: 'ExportNamedDeclaration',144message: 'Prefer default export.',145}],146}),147],148});149150context('TypeScript', function () {151getNonDefaultParsers().forEach((parser) => {152const parserConfig = {153parser,154settings: {155'import/parsers': { [parser]: ['.ts'] },156'import/resolver': { 'eslint-import-resolver-typescript': true },157},158};159160ruleTester.run('prefer-default-export', rule, {161valid: [162// Exporting types163test({164code: `165export type foo = string;166export type bar = number;`,167...parserConfig,168}),169test({170code: `171export type foo = string;172export type bar = number;`,173...parserConfig,174}),175test({176code: 'export type foo = string',177...parserConfig,178}),179test({180code: 'export type foo = string',181...parserConfig,182}),183test({184code: 'export interface foo { bar: string; }',185...parserConfig,186}),187test({188code: 'export interface foo { bar: string; }; export function goo() {}',189...parserConfig,190}),191],192invalid: [],193});194});195});196197198