From ddedc52dc5aaaa831448a2cc032aeae6e6222efe Mon Sep 17 00:00:00 2001 From: JC Franco Date: Tue, 20 Jul 2021 18:58:45 -0700 Subject: [PATCH] fix(valid-describe): report on value-returning describe blocks --- docs/rules/valid-describe.md | 6 ++++++ src/rules/__tests__/valid-describe.test.ts | 15 ++++++++++----- src/rules/valid-describe.ts | 7 +++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/docs/rules/valid-describe.md b/docs/rules/valid-describe.md index 0a603c2c5..b79449df3 100644 --- a/docs/rules/valid-describe.md +++ b/docs/rules/valid-describe.md @@ -43,6 +43,12 @@ describe('myFunction', () => { }); }); }); + +// Returning a value from a describe block is not allowed +describe('myFunction', () => + it('returns a truthy value', () => { + expect(myFunction()).toBeTruthy(); + })); ``` The following patterns are not considered warnings: diff --git a/src/rules/__tests__/valid-describe.test.ts b/src/rules/__tests__/valid-describe.test.ts index 011d70167..2fe007afb 100644 --- a/src/rules/__tests__/valid-describe.test.ts +++ b/src/rules/__tests__/valid-describe.test.ts @@ -36,11 +36,6 @@ ruleTester.run('valid-describe', rule, { }) }) `, - dedent` - describe('foo', () => - test('bar', () => {}) - ) - `, dedent` if (hasOwnProperty(obj, key)) { } @@ -196,6 +191,16 @@ ruleTester.run('valid-describe', rule, { { messageId: 'unexpectedReturnInDescribe', line: 5, column: 5 }, ], }, + { + code: dedent` + describe('foo', () => + test('bar', () => {}) + ) + `, + errors: [ + { messageId: 'unexpectedReturnInDescribe', line: 1, column: 17 }, + ], + }, { code: 'describe("foo", done => {})', errors: [ diff --git a/src/rules/valid-describe.ts b/src/rules/valid-describe.ts index 8bcbfd20c..2f19094e2 100644 --- a/src/rules/valid-describe.ts +++ b/src/rules/valid-describe.ts @@ -84,6 +84,13 @@ export default createRule({ }); } + if (callback.body.type === AST_NODE_TYPES.CallExpression) { + context.report({ + messageId: 'unexpectedReturnInDescribe', + node: callback, + }); + } + if (callback.body.type === AST_NODE_TYPES.BlockStatement) { callback.body.body.forEach(node => { if (node.type === AST_NODE_TYPES.ReturnStatement) {