Files
vscode/test/unit
Alexandru Dima bf2334eeee ci: add Node.js diagnostic reports for test crash investigation (#321216)
* ci: add Node.js diagnostic reports for test crash investigation

Enable Node.js diagnostic reporting for the node.js unit test runner
so that native crashes (like the zlib crash in build 447204) produce
actionable diagnostic reports instead of a silent exit code 1.

Changes:
- Configure process.report in test/unit/node/index.js to write JSON
  diagnostic reports to .build/crashes on fatal errors and uncaught
  exceptions
- Add unhandledRejection handler (was missing, unlike Electron tests)
- Set NODE_OPTIONS in CI pipeline steps (win32, linux, darwin) with
  --report-on-fatalerror and --report-uncaught-exception flags
- Reports are picked up by the existing crash-dump artifact collection

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: remove process.exit(1) from exception handlers

The uncaughtException handler intentionally does NOT exit — it logs
the error and lets Mocha continue running. The test suite has a
dedicated 'Errors' suite that asserts on collected unexpected errors
at the end. Calling process.exit(1) kills the test runner on the
first uncaught exception, failing all Electron tests on all platforms.

Keep the writeReport() calls for diagnostic purposes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: remove writeReport() from exception handlers

The manual writeReport() calls fire on benign unhandled rejections
(e.g. Canceled errors during test teardown in UserDataSyncService)
and block the event loop writing JSON reports to disk, causing
subsequent faked-timer tests to exceed their 2000ms timeout.

Report generation is already handled by process.report config and
NODE_OPTIONS flags (--report-on-fatalerror, --report-uncaught-exception)
which only fire on actual fatal errors, not on every caught rejection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-13 10:42:31 +02:00
..

Unit Tests

Run (inside Electron)

./scripts/test.[sh|bat]

All unit tests are run inside a Electron renderer environment which access to DOM and Nodejs api. This is the closest to the environment in which VS Code itself ships. Notes:

  • use the --debug to see an electron window with dev tools which allows for debugging
  • to run only a subset of tests use the --run or --glob options
  • use npm run watch to automatically compile changes

For instance, ./scripts/test.sh --debug --glob **/extHost*.test.js runs all tests from extHost-files and enables you to debug them.

Run (inside browser)

npm run test-browser -- --browser webkit --browser chromium

Unit tests from layers common and browser are run inside chromium, webkit, and (soon'ish) firefox (using playwright). This complements our electron-based unit test runner and adds more coverage of supported platforms. Notes:

  • these tests are part of the continuous build, that means you might have test failures that only happen with webkit on windows or chromium on linux
  • you can run these tests locally via npm run test-browser -- --browser chromium --browser webkit
  • to debug, open <vscode>/test/unit/browser/renderer.html inside a browser and use the ?m=<amd_module>-query to specify what AMD module to load, e.g file:///Users/jrieken/Code/vscode/test/unit/browser/renderer.html?m=vs/base/test/common/strings.test runs all tests from strings.test.ts
  • to run only a subset of tests use the --run or --glob options

Note: you can enable verbose logging of playwright library by setting a DEBUG environment variable before running the tests (https://playwright.dev/docs/debug#verbose-api-logs)

Run (with node)

npm run test-node -- --run src/vs/editor/test/browser/controller/cursor.test.ts

Coverage

The following command will create a coverage folder in the .build folder at the root of the workspace:

OS X and Linux

./scripts/test.sh --coverage

Windows

scripts\test --coverage