Skip to content

Commit b3768f8

Browse files
committed
fix(valid-describe-callback): Support unnamed describe
1 parent 3b272af commit b3768f8

File tree

2 files changed

+23
-33
lines changed

2 files changed

+23
-33
lines changed

src/rules/valid-describe-callback.test.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,9 @@ import rule from './valid-describe-callback'
44

55
runRuleTester('valid-describe-callback', rule, {
66
invalid: [
7-
{
8-
code: 'test.describe(() => {})',
9-
errors: [{ column: 15, line: 1, messageId: 'nameAndCallback' }],
10-
},
11-
{
12-
code: 'describe(() => {})',
13-
errors: [{ column: 10, line: 1, messageId: 'nameAndCallback' }],
14-
},
157
{
168
code: 'test.describe("foo")',
17-
errors: [{ column: 15, line: 1, messageId: 'nameAndCallback' }],
9+
errors: [{ column: 15, line: 1, messageId: 'missingCallback' }],
1810
},
1911
{
2012
code: 'test.describe("foo", { tag: ["@slow"] });',
@@ -30,7 +22,7 @@ runRuleTester('valid-describe-callback', rule, {
3022
},
3123
{
3224
code: 'test.describe()',
33-
errors: [{ column: 1, line: 1, messageId: 'nameAndCallback' }],
25+
errors: [{ column: 1, line: 1, messageId: 'missingCallback' }],
3426
},
3527
{
3628
code: 'test.describe("foo", async () => {})',
@@ -154,8 +146,10 @@ runRuleTester('valid-describe-callback', rule, {
154146
},
155147
// Global aliases
156148
{
157-
code: 'it.describe(() => {})',
158-
errors: [{ column: 13, line: 1, messageId: 'nameAndCallback' }],
149+
code: 'it.describe("foo", done => {})',
150+
errors: [
151+
{ column: 20, line: 1, messageId: 'unexpectedDescribeArgument' },
152+
],
159153
settings: {
160154
playwright: {
161155
globalAliases: { test: ['it'] },
@@ -164,9 +158,11 @@ runRuleTester('valid-describe-callback', rule, {
164158
},
165159
],
166160
valid: [
161+
'describe(() => {})',
167162
'describe.configure({ timeout: 600_000 })',
168163
'describe("foo", function() {})',
169164
'describe("foo", () => {})',
165+
'test.describe(() => {})',
170166
'test.describe.configure({ timeout: 600_000 })',
171167
'test.describe("foo", function() {})',
172168
'test.describe("foo", () => {})',

src/rules/valid-describe-callback.ts

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Rule } from 'eslint'
22
import * as ESTree from 'estree'
3-
import { getStringValue, isFunction } from '../utils/ast'
3+
import { getStringValue, isFunction, isStringLiteral } from '../utils/ast'
44
import { parseFnCall } from '../utils/parseFnCall'
55

66
const paramsLocation = (
@@ -15,14 +15,6 @@ const paramsLocation = (
1515
}
1616
}
1717

18-
function parseArgs(node: ESTree.CallExpression) {
19-
const [name, b, c] = node.arguments
20-
const options = node.arguments.length === 2 ? b : undefined
21-
const callback = node.arguments.length === 3 ? c : b
22-
23-
return [name, options, callback] as const
24-
}
25-
2618
export default {
2719
create(context) {
2820
return {
@@ -35,47 +27,49 @@ export default {
3527
return
3628
}
3729

38-
const [name, _, callback] = parseArgs(node)
30+
const callback = node.arguments.at(-1)
3931

40-
if (node.arguments.length < 1) {
32+
// e.g., test.describe()
33+
if (!callback) {
4134
return context.report({
4235
loc: node.loc!,
43-
messageId: 'nameAndCallback',
36+
messageId: 'missingCallback',
4437
})
4538
}
4639

47-
if (!name || !callback) {
48-
context.report({
40+
// e.g., test.describe("foo")
41+
if (node.arguments.length === 1 && isStringLiteral(callback)) {
42+
return context.report({
4943
loc: paramsLocation(node.arguments),
50-
messageId: 'nameAndCallback',
44+
messageId: 'missingCallback',
5145
})
52-
53-
return
5446
}
5547

48+
// e.g., test.describe("foo", "foo2");
5649
if (!isFunction(callback)) {
57-
context.report({
50+
return context.report({
5851
loc: paramsLocation(node.arguments),
5952
messageId: 'invalidCallback',
6053
})
61-
62-
return
6354
}
6455

56+
// e.g., test.describe("foo", async () => {});
6557
if (callback.async) {
6658
context.report({
6759
messageId: 'noAsyncDescribeCallback',
6860
node: callback,
6961
})
7062
}
7163

64+
// e.g., test.describe("foo", (done) => {});
7265
if (callback.params.length) {
7366
context.report({
7467
loc: paramsLocation(callback.params),
7568
messageId: 'unexpectedDescribeArgument',
7669
})
7770
}
7871

72+
// e.g., test.describe("foo", () => { return; });
7973
if (callback.body.type === 'CallExpression') {
8074
context.report({
8175
messageId: 'unexpectedReturnInDescribe',
@@ -105,7 +99,7 @@ export default {
10599
},
106100
messages: {
107101
invalidCallback: 'Callback argument must be a function',
108-
nameAndCallback: 'Describe requires name and callback arguments',
102+
missingCallback: 'Describe requires a callback',
109103
noAsyncDescribeCallback: 'No async describe callback',
110104
unexpectedDescribeArgument: 'Unexpected argument(s) in describe callback',
111105
unexpectedReturnInDescribe:

0 commit comments

Comments
 (0)