/
require-await.test.ts
154 lines (149 loc) · 4.48 KB
/
require-await.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import rule from '../../src/rules/require-await';
import { RuleTester, getFixturesRootDir } from '../RuleTester';
const rootDir = getFixturesRootDir();
const ruleTester = new RuleTester({
parserOptions: {
ecmaVersion: 2018,
tsconfigRootDir: rootDir,
project: './tsconfig.json',
},
parser: '@typescript-eslint/parser',
});
// The rule has no messageId
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const noAwaitFunctionDeclaration: any = {
message: "Async function 'numberOne' has no 'await' expression.",
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const noAwaitFunctionExpression: any = {
message: "Async function has no 'await' expression.",
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const noAwaitAsyncFunctionExpression: any = {
message: "Async arrow function has no 'await' expression.",
};
ruleTester.run('require-await', rule, {
valid: [
{
// Non-async function declaration
code: `function numberOne(): number {
return 1;
}`,
},
{
// Non-async function expression
code: `const numberOne = function(): number {
return 1;
}`,
},
{
// Non-async arrow function expression (concise-body)
code: `const numberOne = (): number => 1;`,
},
{
// Non-async arrow function expression (block-body)
code: `const numberOne = (): number => {
return 1;
};`,
},
{
// Async function declaration with await
code: `async function numberOne(): Promise<number> {
return await 1;
}`,
},
{
// Async function expression with await
code: `const numberOne = async function(): Promise<number> {
return await 1;
}`,
},
{
// Async arrow function expression with await (concise-body)
code: `const numberOne = async (): Promise<number> => await 1;`,
},
{
// Async arrow function expression with await (block-body)
code: `const numberOne = async (): Promise<number> => {
return await 1;
};`,
},
{
// Async function declaration with promise return
code: `async function numberOne(): Promise<number> {
return Promise.resolve(1);
}`,
},
{
// Async function expression with promise return
code: `const numberOne = async function(): Promise<number> {
return Promise.resolve(1);
}`,
},
{
// Async arrow function with promise return (concise-body)
code: `const numberOne = async (): Promise<number> => Promise.resolve(1);`,
},
{
// Async arrow function with promise return (block-body)
code: `const numberOne = async (): Promise<number> => {
return Promise.resolve(1);
};`,
},
{
// Async function declaration with async function return
code: `async function numberOne(): Promise<number> {
return getAsyncNumber(1);
}
async function getAsyncNumber(x: number): Promise<number> {
return Promise.resolve(x);
}`,
},
{
// Async function expression with async function return
code: `const numberOne = async function(): Promise<number> {
return getAsyncNumber(1);
}
const getAsyncNumber = async function(x: number): Promise<number> {
return Promise.resolve(x);
}`,
},
{
// Async arrow function with async function return (concise-body)
code: `const numberOne = async (): Promise<number> => getAsyncNumber(1);
const getAsyncNumber = async function(x: number): Promise<number> {
return Promise.resolve(x);
}`,
},
{
// Async arrow function with async function return (block-body)
code: `const numberOne = async (): Promise<number> => {
return getAsyncNumber(1);
};
const getAsyncNumber = async function(x: number): Promise<number> {
return Promise.resolve(x);
}`,
},
],
invalid: [
{
// Async function declaration with no await
code: `async function numberOne(): Promise<number> {
return 1;
}`,
errors: [noAwaitFunctionDeclaration],
},
{
// Async function expression with no await
code: `const numberOne = async function(): Promise<number> {
return 1;
}`,
errors: [noAwaitFunctionExpression],
},
{
// Async arrow function expression with no await
code: `const numberOne = async (): Promise<number> => 1;`,
errors: [noAwaitAsyncFunctionExpression],
},
],
});