-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Describe the bug
Vitest requires errors the override toJSON methods to return message and stack in the resulting object.
Without those fields present the error will not have the stack trace or the message visible in the console output.
This diverges from the standard way errors are serialized:
JSON.stringify(new Error("foo")) === "{}"Currently the vitest error serializer ignores message and stack properties on the error object if there's toJSON method defined. Instead it should inspect message and stack even if toJSON method is defined.
This issue is apparent when using vitest with https://effect.website/ library. Their errors have toJSON defined as:
toJSON() {
return { ...this }
}Using effect with vitest results in errors that have no stack traces, which is very difficult to debug.
Reproduction
https://stackblitz.com/edit/vitest-dev-vitest-muksh8v1?file=test%2Ferrors.test.ts
System Info
System:
OS: Linux 5.0 undefined
CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Memory: 0 Bytes / 0 Bytes
Shell: 1.0 - /bin/jsh
Binaries:
Node: 20.19.1 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 10.8.2 - /usr/local/bin/npm
pnpm: 8.15.6 - /usr/local/bin/pnpm
npmPackages:
@vitest/ui: latest => 3.1.4
vite: latest => 6.3.5
vitest: latest => 3.1.4Used Package Manager
npm
Validations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.