diff --git a/src/rules/__tests__/no-test-callback.test.ts b/src/rules/__tests__/no-test-callback.test.ts index 89b91aae7..bcd1dd03b 100644 --- a/src/rules/__tests__/no-test-callback.test.ts +++ b/src/rules/__tests__/no-test-callback.test.ts @@ -54,20 +54,38 @@ ruleTester.run('no-test-callback', rule, { }, { code: 'test("something", async done => {done();})', - errors: [{ messageId: 'illegalTestCallback', line: 1, column: 25 }], - output: - 'test("something", async () => {await new Promise(done => {done();})})', + errors: [{ messageId: 'useAwaitInsteadOfCallback', line: 1, column: 25 }], }, { code: 'test("something", async done => done())', - errors: [{ messageId: 'illegalTestCallback', line: 1, column: 25 }], - output: 'test("something", async () => new Promise(done => done()))', + errors: [{ messageId: 'useAwaitInsteadOfCallback', line: 1, column: 25 }], }, { code: 'test("something", async function (done) {done();})', - errors: [{ messageId: 'illegalTestCallback', line: 1, column: 35 }], - output: - 'test("something", async function () {await new Promise((done) => {done();})})', + errors: [{ messageId: 'useAwaitInsteadOfCallback', line: 1, column: 35 }], + }, + { + code: ` + test('my test', async (done) => { + await myAsyncTask(); + expect(true).toBe(false); + done(); + }); + `, + errors: [{ messageId: 'useAwaitInsteadOfCallback', line: 2, column: 30 }], + }, + { + code: ` + test('something', (done) => { + done(); + }); + `, + errors: [{ messageId: 'illegalTestCallback', line: 2, column: 26 }], + output: ` + test('something', () => {return new Promise((done) => { + done(); + })}); + `, }, ], }); diff --git a/src/rules/no-test-callback.ts b/src/rules/no-test-callback.ts index 9625ba1b9..e8698ab45 100644 --- a/src/rules/no-test-callback.ts +++ b/src/rules/no-test-callback.ts @@ -10,6 +10,8 @@ export default createRule({ }, messages: { illegalTestCallback: 'Illegal usage of test callback', + useAwaitInsteadOfCallback: + 'Use await instead of callback in async functions', }, fixable: 'code', schema: [], @@ -31,6 +33,15 @@ export default createRule({ const [argument] = callback.params; + if (callback.async) { + context.report({ + node: argument, + messageId: 'useAwaitInsteadOfCallback', + }); + + return; + } + context.report({ node: argument, messageId: 'illegalTestCallback', @@ -84,7 +95,7 @@ export default createRule({ let replaceBefore = true; if (body.type === 'BlockStatement') { - const keyword = callback.async ? 'await' : 'return'; + const keyword = 'return'; beforeReplacement = `${keyword} ${beforeReplacement}{`; afterReplacement += '}';