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