Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/eslint-plugin-import
Path: blob/main/tests/src/rules/no-anonymous-default-export.js
829 views
1
import { test, SYNTAX_CASES } from '../utils';
2
3
import { RuleTester } from 'eslint';
4
5
const ruleTester = new RuleTester();
6
const rule = require('rules/no-anonymous-default-export');
7
8
ruleTester.run('no-anonymous-default-export', rule, {
9
valid: [
10
// Exports with identifiers are valid
11
test({ code: 'const foo = 123\nexport default foo' }),
12
test({ code: 'export default function foo() {}' }),
13
test({ code: 'export default class MyClass {}' }),
14
15
// Allow each forbidden type with appropriate option
16
test({ code: 'export default []', options: [{ allowArray: true }] }),
17
test({ code: 'export default () => {}', options: [{ allowArrowFunction: true }] }),
18
test({ code: 'export default class {}', options: [{ allowAnonymousClass: true }] }),
19
test({ code: 'export default function() {}', options: [{ allowAnonymousFunction: true }] }),
20
test({ code: 'export default 123', options: [{ allowLiteral: true }] }),
21
test({ code: 'export default \'foo\'', options: [{ allowLiteral: true }] }),
22
test({ code: 'export default `foo`', options: [{ allowLiteral: true }] }),
23
test({ code: 'export default {}', options: [{ allowObject: true }] }),
24
test({ code: 'export default foo(bar)', options: [{ allowCallExpression: true }] }),
25
26
// Allow forbidden types with multiple options
27
test({ code: 'export default 123', options: [{ allowLiteral: true, allowObject: true }] }),
28
test({ code: 'export default {}', options: [{ allowLiteral: true, allowObject: true }] }),
29
30
// Sanity check unrelated export syntaxes
31
test({ code: 'export * from \'foo\'' }),
32
test({ code: 'const foo = 123\nexport { foo }' }),
33
test({ code: 'const foo = 123\nexport { foo as default }' }),
34
35
// Allow call expressions by default for backwards compatibility
36
test({ code: 'export default foo(bar)' }),
37
38
...SYNTAX_CASES,
39
],
40
41
invalid: [
42
test({ code: 'export default []', errors: [{ message: 'Assign array to a variable before exporting as module default' }] }),
43
test({ code: 'export default () => {}', errors: [{ message: 'Assign arrow function to a variable before exporting as module default' }] }),
44
test({ code: 'export default class {}', errors: [{ message: 'Unexpected default export of anonymous class' }] }),
45
test({ code: 'export default function() {}', errors: [{ message: 'Unexpected default export of anonymous function' }] }),
46
test({ code: 'export default 123', errors: [{ message: 'Assign literal to a variable before exporting as module default' }] }),
47
test({ code: 'export default \'foo\'', errors: [{ message: 'Assign literal to a variable before exporting as module default' }] }),
48
test({ code: 'export default `foo`', errors: [{ message: 'Assign literal to a variable before exporting as module default' }] }),
49
test({ code: 'export default {}', errors: [{ message: 'Assign object to a variable before exporting as module default' }] }),
50
test({ code: 'export default foo(bar)', options: [{ allowCallExpression: false }], errors: [{ message: 'Assign call result to a variable before exporting as module default' }] }),
51
52
// Test failure with non-covering exception
53
test({ code: 'export default 123', options: [{ allowObject: true }], errors: [{ message: 'Assign literal to a variable before exporting as module default' }] }),
54
],
55
});
56
57