--- title: Debugging | Guide --- # Debugging :::tip When debugging tests you might want to use following options: - [`--test-timeout=0`](/guide/cli#testtimeout) to prevent tests from timing out when stopping at breakpoints - [`--no-file-parallelism`](/guide/cli#fileparallelism) to prevent test files from running parallel ::: ## VS Code Quick way to debug tests in VS Code is via `JavaScript Debug Terminal`. Open a new `JavaScript Debug Terminal` and run `npm run test` or `vitest` directly. *this works with any code run in Node, so will work with most JS testing frameworks* ![image](https://user-images.githubusercontent.com/5594348/212169143-72bf39ce-f763-48f5-822a-0c8b2e6a8484.png) You can also add a dedicated launch configuration to debug a test file in VS Code: ```json { // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Debug Current Test File", "autoAttachChildProcesses": true, "skipFiles": ["/**", "**/node_modules/**"], "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", "args": ["run", "${relativeFile}"], "smartStep": true, "console": "integratedTerminal" } ] } ``` Then in the debug tab, ensure 'Debug Current Test File' is selected. You can then open the test file you want to debug and press F5 to start debugging. ### Browser mode To debug [Vitest Browser Mode](/guide/browser/index.md), pass `--inspect` or `--inspect-brk` in CLI or define it in your Vitest configuration: ::: code-group ```bash [CLI] vitest --inspect-brk --browser --no-file-parallelism ``` ```ts [vitest.config.js] import { defineConfig } from 'vitest/config' export default defineConfig({ test: { inspectBrk: true, fileParallelism: false, browser: { provider: 'playwright', instances: [{ browser: 'chromium' }] }, }, }) ``` ::: By default Vitest will use port `9229` as debugging port. You can overwrite it with by passing value in `--inspect-brk`: ```bash vitest --inspect-brk=127.0.0.1:3000 --browser --no-file-parallelism ``` Use following [VSCode Compound configuration](https://code.visualstudio.com/docs/editor/debugging#_compound-launch-configurations) for launching Vitest and attaching debugger in the browser: ```json { "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Run Vitest Browser", "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", "console": "integratedTerminal", "args": ["--inspect-brk", "--browser", "--no-file-parallelism"] }, { "type": "chrome", "request": "attach", "name": "Attach to Vitest Browser", "port": 9229 } ], "compounds": [ { "name": "Debug Vitest Browser", "configurations": ["Attach to Vitest Browser", "Run Vitest Browser"], "stopAll": true } ] } ``` ## IntelliJ IDEA Create a [vitest](https://www.jetbrains.com/help/idea/vitest.html#createRunConfigVitest) run configuration. Use the following settings to run all tests in debug mode: Setting | Value --- | --- Working directory | `/path/to/your-project-root` Then run this configuration in debug mode. The IDE will stop at JS/TS breakpoints set in the editor. ## Node Inspector, e.g. Chrome DevTools Vitest also supports debugging tests without IDEs. However this requires that tests are not run parallel. Use one of the following commands to launch Vitest. ```sh # To run in a single worker vitest --inspect-brk --pool threads --poolOptions.threads.singleThread # To run in a single child process vitest --inspect-brk --pool forks --poolOptions.forks.singleFork # To run in browser mode vitest --inspect-brk --browser --no-file-parallelism ``` If you are using Vitest 1.1 or higher, you can also just provide `--no-file-parallelism` flag: ```sh # If pool is unknown vitest --inspect-brk --no-file-parallelism ``` Once Vitest starts it will stop execution and wait for you to open developer tools that can connect to [Node.js inspector](https://nodejs.org/en/docs/guides/debugging-getting-started/). You can use Chrome DevTools for this by opening `chrome://inspect` on browser. In watch mode you can keep the debugger open during test re-runs by using the `--poolOptions.threads.isolate false` options.