vitest/require-test-timeout
Require every test to set a timeout
A test without its own timeout gets the default, which is 5 seconds unless your config changes it. That's a long wait when a unit test hangs, and it's too short for a test that starts a server, which then fails now and then on a slow machine.
Set the timeout as a number after the test function, as { timeout } in the options before it, or for all the tests below with vi.setConfig({ testTimeout }).
Tests marked .skip or .todo aren't checked.
Configure#
Off by default. To turn it on:
bunfig.toml
[lint.rules]
"vitest/require-test-timeout" = "error" # or "warn"Examples#
example.js1 problem
import { expect, test } from "vitest";
test("loads the report", async () => {Test is missing a timeout.
expect(await loadReport()).toBeDefined();
});example.jsNo problems
import { expect, test } from "vitest";
test("loads the report", async () => {
expect(await loadReport()).toBeDefined();
}, 10_000);
test("exports the report", { timeout: 30_000 }, async () => {
expect(await exportReport()).toBeDefined();
});example.jsNo problems
import { expect, test, vi } from "vitest";
vi.setConfig({ testTimeout: 10_000 });
test("loads the report", async () => {
expect(await loadReport()).toBeDefined();
});The timeout must be written as a number that isn't negative. A variable is reported, and so are options without timeout:
example.js2 problems
import { test } from "vitest";
const SLOW = 30_000;
test("exports the report", async () => {
await exportReport();
}, SLOWTimeout must be a number.);
test("prints the report", { retry: 2 }Test options object is missing a timeout property., async () => {
await printReport();
});When not to use it#
If the default timeout, or the testTimeout in your Vitest config, suits all your tests, a number on each test adds nothing.