Skip to content

Commit fe144ea

Browse files
authored
Add generator function to accepted hook types (#10836)
1 parent e12a302 commit fe144ea

3 files changed

Lines changed: 25 additions & 6 deletions

File tree

packages/jest-circus/src/utils.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,25 @@ export const callAsyncCircusFn = (
216216
});
217217
};
218218

219-
returnedValue = fn.call(testContext, done);
219+
returnedValue = fn.call<
220+
Circus.TestContext | undefined,
221+
Array<typeof done>,
222+
void | Promise<unknown> | Generator | undefined
223+
>(testContext, done);
220224

221225
return;
222226
}
223227

224-
let returnedValue;
228+
let returnedValue: any;
225229
if (isGeneratorFn(fn)) {
226230
returnedValue = co.wrap(fn).call({});
227231
} else {
228232
try {
229-
returnedValue = fn.call(testContext);
233+
returnedValue = fn.call<
234+
Circus.TestContext | undefined,
235+
[],
236+
void | Promise<unknown> | Generator | undefined
237+
>(testContext);
230238
} catch (error) {
231239
reject(error);
232240
return;

packages/jest-types/src/Global.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77

88
import type {CoverageMapData} from 'istanbul-lib-coverage';
99

10+
export type GeneratorFn = (...args: Array<any>) => Generator;
1011
export type DoneFn = (reason?: string | Error) => void;
11-
export type TestName = string;
12-
export type TestFn = (
12+
export type CallbackFn = (
1313
done?: DoneFn,
14-
) => Promise<void | undefined | unknown> | void | undefined;
14+
) => void | undefined | Promise<void | undefined | unknown>;
15+
16+
export type TestName = string;
17+
export type TestFn = GeneratorFn | CallbackFn;
1518
export type ConcurrentTestFn = (
1619
done?: DoneFn,
1720
) => Promise<void | undefined | unknown>;

test-types/top-level-globals.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,32 @@ import {
1919

2020
const fn = () => {};
2121
const asyncFn = async () => {};
22+
const genFn = function* () {};
2223
const timeout = 5;
2324
const testName = 'Test name';
2425
const testTable = [[1, 2]];
2526

2627
// https://jestjs.io/docs/en/api#methods
2728
expectType<void>(afterAll(fn));
2829
expectType<void>(afterAll(asyncFn));
30+
expectType<void>(afterAll(genFn));
2931
expectType<void>(afterAll(fn, timeout));
3032
expectType<void>(afterEach(fn));
3133
expectType<void>(afterEach(asyncFn));
34+
expectType<void>(afterEach(genFn));
3235
expectType<void>(afterEach(fn, timeout));
3336
expectType<void>(beforeAll(fn));
3437
expectType<void>(beforeAll(asyncFn));
38+
expectType<void>(beforeAll(genFn));
3539
expectType<void>(beforeAll(fn, timeout));
3640
expectType<void>(beforeEach(fn));
3741
expectType<void>(beforeEach(asyncFn));
42+
expectType<void>(beforeEach(genFn));
3843
expectType<void>(beforeEach(fn, timeout));
3944

45+
expectType<void>(test(testName, fn));
46+
expectType<void>(test(testName, asyncFn));
47+
expectType<void>(test(testName, genFn));
4048
expectType<void>(test.each(testTable)(testName, fn));
4149
expectType<void>(test.each(testTable)(testName, fn, timeout));
4250
expectType<void>(test.only.each(testTable)(testName, fn));

0 commit comments

Comments
 (0)