jest/no-done-callback
Disallow the done callback in tests and hooks in favor of promises
A test that takes a done parameter waits until done() is called. If an expect throws first, done() is never reached, and the test fails with a timeout instead of the real error. An async test, or one that returns a promise, fails with the error itself.
The parameter's name doesn't matter. Any test or hook callback with exactly one parameter is reported.
Configure#
Off by default. To turn it on:
bunfig.toml
[lint.rules]
"jest/no-done-callback" = "error" # or "warn"Examples#
example.ts1 problem
import { expect, test } from "@jest/globals";
test("reads the config", doneFunction parameter(s) use the done argument => {
readConfig((error, config) => {
expect(config.port).toBe(3000);
done();
});
});example.tsNo problems
import { expect, test } from "@jest/globals";
test("reads the config", async () => {
const config = await readConfig();
expect(config.port).toBe(3000);
});If the API only takes a callback, wrap it in a promise:
example.tsNo problems
import { afterAll } from "@jest/globals";
afterAll(() => new Promise(resolve => server.close(resolve)));The test.each([...]) callback isn't checked, because its parameters are the row's values:
example.tsNo problems
import { expect, test } from "@jest/globals";
test.each([1, 2, 3])("%i is positive", value => {
expect(value).toBeGreaterThan(0);
});