如何为Node.js内置测试器的test()函数设置默认超时时间?
如何为Node.js内置测试运行器的test()函数设置默认超时时间?
目前Node.js内置测试运行器(node:test模块)没有直接为所有test()设置全局默认超时的官方快捷配置,但可以通过两种实用的变通方法实现需求:
方法1:封装自定义的test函数
自己写一个包装函数,给每个测试自动带上默认超时参数,同时支持单个测试按需覆盖:
import { test as originalTest } from 'node:test'; async function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } // 封装带默认超时的test函数,默认2000ms const test = (name: string, opts: { timeout?: number } = {}, fn: () => Promise<void>) => { return originalTest(name, { timeout: opts.timeout ?? 2000 }, fn); }; suite('test-timeout', function () { test('t1', async function () { await sleep(1500); // 正常通过 }); test('t2', async function () { await sleep(1500); // 正常通过 }); test('t99', async function () { await sleep(3000); // 超过2000ms,测试失败 }); // 单个测试需要特殊超时的话,直接传参覆盖默认值 test('t-special', { timeout: 5000 }, async function () { await sleep(4000); // 正常通过 }); });
方法2:使用全局配置(Node.js v20+)
Node.js v20及以上版本支持通过test.configure()在文件顶部设置全局测试选项,其中包含默认超时设置,作用于当前文件内所有测试:
import { test, configure, suite } from 'node:test'; // 全局设置所有测试的默认超时为2000ms configure({ timeout: 2000 }); async function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } suite('test-timeout', function () { test('t1', async function () { await sleep(1500); // 正常通过 }); test('t2', async function () { await sleep(1500); // 正常通过 }); test('t99', async function () { await sleep(3000); // 超过默认超时,测试失败 }); });
关于套件超时的说明
你遇到的「套件设置超时导致t2就失败」的问题,是因为套件的timeout参数控制的是整个套件的总运行时长上限,而非每个子测试的单独超时。所以套件的超时配置并不适合用来实现“每个测试默认超时N毫秒”的需求,上面两种方法才是正确的思路。
内容的提问来源于stack exchange,提问作者mrtnlrsn
相关产品推荐
相关产品推荐

