You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:16:07