What is the best way to automatically set jest timeout when debugging tests?

Viewed 851

I have a nodejs project. I'm using the debugger (in IntelliJ if it matters) to step through tests. I'd like to configure my project using best practices so that when I'm using the debugger I modify the test timeout to be longer than the default 5 seconds. I am aware that I can put the following line in package.json to change the timeout.

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

But I'm looking for a way to modify the timeout only (and automatically) when debugging. I'm sure there is a good way, but I'm fairly new to nodejs and the conventions/mechanisms for setting up various envionments.

2 Answers

If using create-react-app, the setupFilesAfterEnv is configured to src\setupTests.ts.

This is the entry point before any tests are executed/debugged and if you can detect that you're in a DEBUG mode then you can set a new timeout.

e.g.,

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

In VS Code, you can add launch.json configuration as documented with "DEBUG": "jest" added to the 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
}

I'm a bit late to the party, but you could also try using 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

disclaimer: I'm the author

Related