调试测试时自动设置jest超时的最佳方法是什么?



我有一个nodejs项目。我正在使用调试器(如果需要的话,在IntelliJ中)逐步完成测试。我想使用最佳实践配置我的项目,以便当我使用调试器时,我修改测试超时比默认的5秒长。我知道我可以把下面这行放在package中。

{
"name": "my-project",
"jest": {
"testTimeout": 20000
}
}

但我正在寻找一种方法来修改超时只有(和自动)调试时。我确信有一个好方法,但我对nodejs和设置各种环境的惯例/机制相当陌生。

如果使用create-react-app,则setupFilesAfterEnv配置为srcsetupTests.ts

这是在执行/调试任何测试之前的入口点,如果您可以检测到您处于DEBUG模式,则可以设置新的超时时间。

if (process.env.DEBUG === 'jest') {
jest.setTimeout(5 * 60 * 1000);
}

在VS Code中,你可以添加launch.json配置文档与"DEBUG": "jest"添加到env

{
"name": "Debug CRA Tests",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/react-app-rewired",
"args": ["test", "--runInBand", "--no-cache", "--watchAll=false"],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"env": {
"CI": "true",
"DEBUG": "jest"
},
"disableOptimisticBPs": true
}

我有点晚了,但你也可以尝试使用https://www.npmjs.com/package/debugger-is-attached:

import { debuggerIsAttached } from "debugger-is-attached";
// later:
const timeout = await debuggerIsAttached()
? 600000 // 10 minutes to debug
: 5000; // the default 5s for jest

免责声明:我是作者

这是另一个简单的选项:

if (require('inspector').url()) {
jest.setTimeout(600_000); // 10 minutes
}

检查来自这篇文章,它也指向本地检查器包的文档。

如果您不想修改launch.json,您也可以通过查找VSCODE_INSPECTOR_OPTIONS环境变量来检测是否处于调试模式。

if (process.env.VSCODE_INSPECTOR_OPTIONS) {
jest.setTimeout(60 * 1000 * 5); // 5 minutes
}

注意:这只适用于在VS Code中调试。如果你的团队使用混合编辑器,设置一个更通用的调试标志是正确的解决方案。

相关内容

最新更新