Describe the bug
Environment:
vitest.explorer version: 1.52.0
vitest: 5.0.1, @vitest/coverage-v8: ^5.0.1, vite: ^7.0.0, reproduceable with vitest 4.0.4
VS-Code: 1.139.0
Node: 24.20
OS: Windows, reproduceable on Mac
Coverage config: provider: 'v8', with an explicit coverage.include glob (source/**/*.{ts,tsx})
Since when
This happend since today an seems to be related to a vs-code / vitest extension update.
Before this problem we had this problem: #826
Currently we have applied the mentioned workaround.
So, this may be a related problem or followup error caused by the workaround for 826.
Scenario
Running "Run All Tests with Coverage" via the Test Explorer intermittently crashes with:
TypeError: Cannot read properties of undefined (reading 'branchMap')
at fn.reportCoverage (extension.js:...)
at Object.trigger [as onTestRunEnd] (extension.js:...)
...
at Object.exports.dataMessage (esm-....js:...)
at Object.exports.getData (esm-....js:...)
at Object.exports.startLoop (esm-....js:...)
at Socket.emit (node:events:...)
It does not happen on every run, and CLI vitest run --coverage never reproduces it — only the Test Explorer's live coverage reporting is affected. Actual coverage output on disk (lcov.info, etc.) is always valid.
Root cause (confirmed by instrumenting the installed extension locally)
In reportCoverage(e), the code unconditionally does:
for (let t in e) {
e[t] = e[t].data; // assumes every entry is wrapped as { data: FileCoverageData }
let r = e[t];
for (let e in r.branchMap) { ... } // throws if e[t].data was undefined
}
By throwing a diagnostic error at the crash site, we confirmed that at least one entry in the coverage map passed to reportCoverage is not wrapped in { data: ... } — it arrives as the raw FileCoverageData object directly (keys: path, statementMap, fnMap, branchMap, s, f, b, meta). So e[t].data is undefined for that entry, and the subsequent r.branchMap access throws.
This was observed for a file with its own dedicated, passing unit test — so it's not limited to files with zero coverage. It appears to depend on timing/ordering of vitest's incremental coverage reporting during a full run (i.e., some entries may be delivered as already-finalized Istanbul objects rather than the raw-data-wrapped shape, depending on when/how that file's coverage was collected relative to the reporting tick).
Workaround that works in our case
for (let t in e) {
e[t] = e[t] && e[t].data !== undefined ? e[t].data : e[t];
let r = e[t];
for (let e in r.branchMap) { ... }
}
We patched this locally in the installed extension and it resolved the crash for us, but it's a workaround rather than a proper fix (we don't know why the entry arrives unwrapped in the first place, and this only handles that one specific shape — anything else still throws as before).
Expected behavior
No crash ;-)
Reproduction
Sorry, No minimal repro (timing-dependent / intermittent). Happy to help narrow it down further if useful — can reliably trigger it in a mid-sized React + Vite + Vitest project with coverage.provider: 'v8' and an explicit coverage.include glob. But cannot share any code
Output
[INFO 2:20:00 PM] [DECOR] Decorations for c:\workspace\git\node-service-template\frontend\source\__tests__\App.unmocked.test.tsx are already cached. Displaying them.
[INFO 2:20:03 PM] [API] Running Vitest v5.0.1 (frontend/vite.config.js) with "C:\nvm4w\nodejs\node.EXE C:/Users/RalfP/.vscode/extensions/vitest.explorer-1.52.0/dist/worker.js"
[2:20:04 PM] Enqueuing "renders TopLevelLayout with correct title"
[2:20:04 PM] Enqueuing "renders the real component tree end-to-end without mocking application code"
[2:20:04 PM] Enqueuing "renders the app entrypoint correctly"
[2:20:04 PM] Enqueuing "renders Sample Component within FederationHosting"
[2:20:04 PM] Enqueuing "renders children"
[2:20:04 PM] Enqueuing "shows overlay and spinner when isVisible is true"
[2:20:04 PM] Enqueuing "does not show overlay when isVisible is false"
[2:20:04 PM] Enqueuing "renders enabled button when permission is granted"
[2:20:04 PM] Enqueuing "renders disabled button with tooltip when permission is denied"
[2:20:04 PM] Enqueuing "passes additional props to Button"
[2:20:04 PM] Enqueuing "should have Close and Ignore enum values"
[2:20:04 PM] Enqueuing "should define showDialog and hideDialog methods"
[2:20:04 PM] Enqueuing "should allow clickOutsideDialogBehavior as enum or function"
[2:20:04 PM] Enqueuing "throws if not used within DialogProvider"
[2:20:04 PM] Enqueuing "returns context value when used within DialogProvider"
[2:20:04 PM] Enqueuing "renders children"
[2:20:04 PM] Enqueuing "shows dialog when showDialog is called"
[2:20:04 PM] Enqueuing "hides dialog when hideDialog is called"
[2:20:04 PM] Enqueuing "renders children when no error is thrown"
[2:20:04 PM] Enqueuing "renders fallback UI when error is thrown"
[2:20:04 PM] Enqueuing "calls onRetry when retry button is clicked"
[2:20:04 PM] Enqueuing "renders error message from Error object"
[2:20:04 PM] Enqueuing "renders Retry button and calls onRetry"
[2:20:04 PM] Enqueuing "renders the fallback UI with error message (string)"
[2:20:04 PM] Enqueuing "renders the fallback UI with error object"
[2:20:04 PM] Enqueuing "calls resetErrorBoundary when retry button is clicked"
[2:20:04 PM] Enqueuing "renders the card skeleton container"
[2:20:04 PM] Enqueuing "renders two Skeleton components"
[2:20:04 PM] Enqueuing "renders a text variant Skeleton"
[2:20:04 PM] Enqueuing "renders a rounded variant Skeleton"
[2:20:04 PM] Enqueuing "renders dialog with default number of actions"
[2:20:04 PM] Enqueuing "renders correct number of action skeletons"
[2:20:04 PM] Enqueuing "renders dialog open"
[2:20:04 PM] Enqueuing "should have defaultPermissions as default value"
[2:20:04 PM] Enqueuing "renders children when permission is granted"
[2:20:04 PM] Enqueuing "does not render children when permission is denied"
[2:20:04 PM] Enqueuing "renders children when "not" prop is used and permission is denied"
[2:20:04 PM] Enqueuing "does not render children when "not" prop is used and permission is granted"
[2:20:04 PM] Enqueuing "provides permissions from usePermissions"
[2:20:04 PM] Enqueuing "falls back to defaultPermissions if permissions is undefined"
[2:20:04 PM] Enqueuing "renders the header title"
[2:20:04 PM] Enqueuing "renders the menu icon button"
[2:20:04 PM] Enqueuing "calls onDrawerToggle when menu icon is clicked"
[2:20:04 PM] Enqueuing "renders icon and label when isOpen is true"
[2:20:04 PM] Enqueuing "hides label when isOpen is false"
[2:20:04 PM] Enqueuing "calls onClick when clicked"
[2:20:04 PM] Enqueuing "applies selected prop"
[2:20:04 PM] Enqueuing "renders all nav items"
[2:20:04 PM] Enqueuing "shows label when sidebar is open"
[2:20:04 PM] Enqueuing "does not show label when sidebar is closed"
[2:20:04 PM] Enqueuing "calls onNavigate with correct path when nav item is clicked"
[2:20:04 PM] Enqueuing "marks the selected nav item"
[2:20:04 PM] Enqueuing "renders Header, Sidebar, and main content"
[2:20:04 PM] Enqueuing "toggles Sidebar open state when Header button is clicked"
[2:20:04 PM] Enqueuing "applies correct drawerWidth prop to Sidebar"
[2:20:04 PM] Enqueuing "renders a Container with maxWidth lg"
[2:20:04 PM] Enqueuing "renders message and button"
[2:20:04 PM] Enqueuing "calls handleClick when button is clicked"
[2:20:04 PM] Enqueuing "returns null when all fields are empty"
[2:20:04 PM] Enqueuing "builds location with address only"
[2:20:04 PM] Enqueuing "builds location with coordinates"
[2:20:04 PM] Enqueuing "excludes geoPoint when only one coordinate provided"
[2:20:04 PM] Enqueuing "returns null when only whitespace provided"
[2:20:04 PM] Enqueuing "returns empty fields for null location"
[2:20:04 PM] Enqueuing "returns empty fields for undefined location"
[2:20:04 PM] Enqueuing "flattens location with all fields"
[2:20:04 PM] Enqueuing "handles location without geoPoint"
[2:20:04 PM] Enqueuing "returns all empty location fields"
[2:20:04 PM] Enqueuing "renders children"
[2:20:04 PM] Enqueuing "renders devtools in debug mode"
[2:20:04 PM] Enqueuing "does not render devtools when not in debug mode"
[2:20:04 PM] Enqueuing "renders all expected wrapper components"
[2:20:04 PM] Enqueuing "returns the expected query key array"
[2:20:04 PM] Enqueuing "returns a new array instance each time"
[2:20:04 PM] Enqueuing "creates configuration with runtime base URL and authentication-aware HTTP handler"
[2:20:04 PM] Enqueuing "sends request once without Authorization when no token is available"
[2:20:04 PM] Enqueuing "attaches Authorization and does not retry when initial response is not unauthorized"
[2:20:04 PM] Enqueuing "retries once with refreshed token when initial response is unauthorized"
[2:20:04 PM] Enqueuing "returns initial unauthorized response when refresh yields no token"
[2:20:04 PM] Enqueuing "sends request once without Authorization when no token is available"
[2:20:04 PM] Enqueuing "attaches Authorization and does not retry when initial response is not unauthorized"
[2:20:04 PM] Enqueuing "retries once with a refreshed token when initial response is unauthorized"
[2:20:04 PM] Enqueuing "returns initial unauthorized response when refresh after unauthorized yields no token"
[2:20:04 PM] Enqueuing "requests token for each concurrent request and applies the resolved token"
[2:20:04 PM] Enqueuing "should instantiate PermissionApi and call getMyPermission"
[2:20:04 PM] Enqueuing "should instantiate SampleApi, subscribe to sample events, and unregister on dispose"
[2:20:04 PM] Enqueuing "should only unregister SSE once when disposed multiple times"
[2:20:04 PM] Enqueuing "should safely dispose when SSE subscribe returns no unregister callback"
[2:20:04 PM] Enqueuing "should process SSE events by logging and invalidating sample queries"
[2:20:04 PM] Enqueuing "should log an error when sample query invalidation fails"
[2:20:04 PM] Enqueuing "uses authenticated fetch provided by ApiConfigurationProvider"
[2:20:04 PM] Enqueuing "registers and calls callbacks on matching message topic"
[2:20:04 PM] Enqueuing "registers and calls callbacks for sample topic messages"
[2:20:04 PM] Enqueuing "registers and calls callbacks for sample messages with empty payload"
[2:20:04 PM] Enqueuing "ignores unknown topic events"
[2:20:04 PM] Enqueuing "clears subscriptions on dispose and no longer invokes callbacks"
[2:20:04 PM] Enqueuing "calls unsubscribe and removes callback and topic"
[2:20:04 PM] Enqueuing "ignores heartbeat events with raw string payload"
[2:20:04 PM] Enqueuing "handles invalid JSON in onmessage and logs error"
[2:20:04 PM] Enqueuing "handles onopen with valid and invalid responses"
[2:20:04 PM] Enqueuing "handles onerror and triggers reconnect logic"
[2:20:04 PM] Enqueuing "returns early in onerror when service is disposed"
[2:20:04 PM] Enqueuing "creates a sample and re-fetches list queries"
[2:20:04 PM] Enqueuing "deletes a sample and re-fetches list & item queries"
[2:20:04 PM] Enqueuing "fetches a sample by id"
[2:20:04 PM] Enqueuing "fetches samples with and without deleted flag"
[2:20:04 PM] Enqueuing "un-deletes a sample and invalidates samples query"
[2:20:04 PM] Enqueuing "updates a sample and re-fetches related queries"
[2:20:04 PM] Enqueuing "should call languageChanged with current language"
[2:20:04 PM] Enqueuing "should register languageChanged event handler"
[2:20:04 PM] Enqueuing "should call changeLanguage if effective language differs"
[2:20:04 PM] Enqueuing "should call changeLanguage if language is changed within session"
[2:20:04 PM] Enqueuing "should NOT call changeLanguage if language in changed event is the same as before"
[2:20:04 PM] Enqueuing "renders children with IntlProvider"
[2:20:04 PM] Enqueuing "calls initializeLocalization on mount"
[2:20:04 PM] Enqueuing "forces language of runtime information"
[2:20:04 PM] Enqueuing "renders the version"
[2:20:04 PM] Enqueuing "renders dialog and title"
[2:20:04 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:04 PM] Enqueuing "calls onCreate and shows success toast on save"
[2:20:04 PM] Enqueuing "renders form fields and buttons"
[2:20:04 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:04 PM] Enqueuing "calls onSave with form data when create button is clicked"
[2:20:04 PM] Enqueuing "submits location as null when all location fields are empty"
[2:20:04 PM] Enqueuing "submits location with address fields when provided"
[2:20:04 PM] Enqueuing "submits location with geoPoint when valid coordinates provided"
[2:20:04 PM] Enqueuing "submits location without geoPoint when only one coordinate is provided"
[2:20:04 PM] Enqueuing "renders dialog with title"
[2:20:04 PM] Enqueuing "calls onCancel when cancel is clicked"
[2:20:04 PM] Enqueuing "calls onSave when save is clicked"
[2:20:04 PM] Enqueuing "renders form fields and buttons"
[2:20:04 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:04 PM] Enqueuing "calls onSave with form data when save button is clicked"
[2:20:04 PM] Enqueuing "initializes form with existing location values"
[2:20:04 PM] Enqueuing "submits updated location when fields are changed"
[2:20:04 PM] Enqueuing "clears location when all fields are emptied"
[2:20:04 PM] Enqueuing "submits location without geoPoint when only address fields provided"
[2:20:04 PM] Enqueuing "renders title, search, and table"
[2:20:04 PM] Enqueuing "filters samples by search"
[2:20:04 PM] Enqueuing "shows deleted info for deleted samples"
[2:20:04 PM] Enqueuing "renders create button"
[2:20:04 PM] Enqueuing "deletes a sample and allows undo via toast element button"
[2:20:04 PM] Enqueuing "opens create dialog when create button is clicked"
[2:20:04 PM] Enqueuing "opens edit dialog when edit button is clicked"
[2:20:04 PM] Enqueuing "toggles includeDeleted when show/hide deleted button is clicked"
[INFO 2:20:04 PM] Running 1 file(s): [ '' ]
[2:20:04 PM] [VSCODE] Flushing 1 deleted items
[2:20:04 PM] [VSCODE] Flushing 3 changed items
[2:20:05 PM] [VSCODE] Flushing 1 created items
[2:20:05 PM] [VSCODE] Flushing 44 deleted items
[2:20:05 PM] [VSCODE] Flushing 2 changed items
[INFO 2:20:06 PM] [DECOR] Reset all decorations.
[2:20:06 PM] No task result for "ToastWithButton.test.tsx", ignoring
[2:20:06 PM] No task result for "ToastWithButton", ignoring
[2:20:06 PM] Enqueuing "renders message and button"
[2:20:06 PM] Enqueuing "calls handleClick when button is clicked"
[2:20:06 PM] No errors found for "ToastWithButton.test.tsx"
[2:20:07 PM] No errors found for "ToastWithButton.test.tsx"
[2:20:07 PM] No errors found for "ToastWithButton"
[2:20:07 PM] Marking "renders message and button" as passed
[2:20:07 PM] Marking "renders message and button" as passed
[2:20:07 PM] Marking "calls handleClick when button is clicked" as passed
[2:20:07 PM] Marking "calls handleClick when button is clicked" as passed
[2:20:07 PM] No errors found for "ToastWithButton"
[2:20:07 PM] No errors found for "ToastWithButton.test.tsx"
[2:20:07 PM] [VSCODE] Flushing 1 created items
[INFO 2:20:07 PM] [DECOR] Reset all decorations.
[2:20:07 PM] No task result for "EditSampleDialog.test.tsx", ignoring
[2:20:07 PM] No task result for "EditSampleDialog", ignoring
[2:20:07 PM] Enqueuing "renders dialog with title"
[2:20:07 PM] Enqueuing "calls onCancel when cancel is clicked"
[2:20:07 PM] Enqueuing "calls onSave when save is clicked"
[2:20:07 PM] No errors found for "EditSampleDialog.test.tsx"
[2:20:08 PM] No errors found for "EditSampleDialog.test.tsx"
[2:20:08 PM] No errors found for "EditSampleDialog"
[2:20:08 PM] Marking "renders dialog with title" as passed
[INFO 2:20:08 PM] [DECOR] Reset all decorations.
[2:20:08 PM] No task result for "CreateSampleForm.test.tsx", ignoring
[2:20:08 PM] No task result for "CreateSampleForm", ignoring
[2:20:08 PM] Enqueuing "renders form fields and buttons"
[2:20:08 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:08 PM] Enqueuing "calls onSave with form data when create button is clicked"
[2:20:08 PM] Enqueuing "submits location as null when all location fields are empty"
[2:20:08 PM] Enqueuing "submits location with address fields when provided"
[2:20:08 PM] Enqueuing "submits location with geoPoint when valid coordinates provided"
[2:20:08 PM] Enqueuing "submits location without geoPoint when only one coordinate is provided"
[INFO 2:20:08 PM] [DECOR] Reset all decorations.
[2:20:08 PM] No task result for "EditSampleForm.test.tsx", ignoring
[2:20:08 PM] No task result for "EditSampleForm", ignoring
[2:20:08 PM] Enqueuing "renders form fields and buttons"
[2:20:08 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:08 PM] Enqueuing "calls onSave with form data when save button is clicked"
[2:20:08 PM] Enqueuing "initializes form with existing location values"
[2:20:08 PM] Enqueuing "submits updated location when fields are changed"
[2:20:08 PM] Enqueuing "clears location when all fields are emptied"
[2:20:08 PM] Enqueuing "submits location without geoPoint when only address fields provided"
[2:20:08 PM] No errors found for "CreateSampleForm.test.tsx"
[2:20:08 PM] No errors found for "EditSampleForm.test.tsx"
[2:20:08 PM] Marking "renders dialog with title" as passed
[2:20:08 PM] Marking "calls onCancel when cancel is clicked" as passed
[2:20:08 PM] Marking "calls onSave when save is clicked" as passed
[2:20:08 PM] No errors found for "EditSampleDialog"
[2:20:08 PM] No errors found for "EditSampleDialog.test.tsx"
[2:20:08 PM] No errors found for "CreateSampleForm.test.tsx"
[2:20:08 PM] No errors found for "CreateSampleForm"
[2:20:08 PM] Marking "renders form fields and buttons" as passed
[2:20:08 PM] No errors found for "EditSampleForm.test.tsx"
[2:20:08 PM] No errors found for "EditSampleForm"
[2:20:08 PM] Marking "renders form fields and buttons" as passed
[2:20:08 PM] [VSCODE] Flushing 1 created items
[2:20:08 PM] Marking "renders form fields and buttons" as passed
[2:20:08 PM] Marking "calls onCancel when cancel button is clicked" as passed
[2:20:08 PM] Marking "renders form fields and buttons" as passed
[2:20:08 PM] Marking "calls onCancel when cancel button is clicked" as passed
[INFO 2:20:09 PM] [DECOR] Reset all decorations.
[2:20:09 PM] No task result for "DialogSkeleton.test.tsx", ignoring
[2:20:09 PM] No task result for "DialogSkeleton", ignoring
[2:20:09 PM] Enqueuing "renders dialog with default number of actions"
[2:20:09 PM] Enqueuing "renders correct number of action skeletons"
[2:20:09 PM] Enqueuing "renders dialog open"
[2:20:09 PM] No errors found for "DialogSkeleton.test.tsx"
[2:20:09 PM] Marking "calls onCancel when cancel button is clicked" as passed
[2:20:09 PM] Marking "calls onSave with form data when create button is clicked" as passed
[2:20:09 PM] Marking "calls onCancel when cancel button is clicked" as passed
[2:20:09 PM] Marking "calls onSave with form data when save button is clicked" as running (state is run)
[2:20:09 PM] No errors found for "DialogSkeleton.test.tsx"
[2:20:09 PM] No errors found for "DialogSkeleton"
[2:20:09 PM] Marking "renders dialog with default number of actions" as passed
[2:20:09 PM] Marking "calls onSave with form data when create button is clicked" as passed
[2:20:09 PM] Marking "submits location as null when all location fields are empty" as running (state is run)
[2:20:09 PM] Marking "renders dialog with default number of actions" as passed
[2:20:09 PM] Marking "renders correct number of action skeletons" as passed
[2:20:09 PM] Marking "renders dialog open" as passed
[2:20:09 PM] No errors found for "DialogSkeleton"
[2:20:09 PM] No errors found for "DialogSkeleton.test.tsx"
[2:20:09 PM] Marking "calls onSave with form data when save button is clicked" as passed
[2:20:09 PM] Marking "initializes form with existing location values" as passed
[2:20:09 PM] [VSCODE] Flushing 1 created items
[2:20:09 PM] Marking "submits location as null when all location fields are empty" as passed
[2:20:09 PM] Marking "submits location with address fields when provided" as running (state is run)
[2:20:09 PM] Marking "initializes form with existing location values" as passed
[2:20:09 PM] Marking "submits updated location when fields are changed" as running (state is run)
[INFO 2:20:10 PM] [DECOR] Reset all decorations.
[2:20:10 PM] No task result for "ErrorComponent.test.tsx", ignoring
[2:20:10 PM] No task result for "Error component", ignoring
[2:20:10 PM] Enqueuing "renders error message from Error object"
[2:20:10 PM] Enqueuing "renders Retry button and calls onRetry"
[2:20:10 PM] No errors found for "ErrorComponent.test.tsx"
[2:20:10 PM] Marking "submits location with address fields when provided" as passed
[2:20:10 PM] Marking "submits location with geoPoint when valid coordinates provided" as passed
[2:20:10 PM] Marking "submits updated location when fields are changed" as passed
[2:20:10 PM] Marking "clears location when all fields are emptied" as running (state is run)
[2:20:10 PM] No errors found for "ErrorComponent.test.tsx"
[2:20:10 PM] No errors found for "Error component"
[2:20:10 PM] Marking "renders error message from Error object" as passed
[2:20:10 PM] Marking "renders Retry button and calls onRetry" as passed
[2:20:10 PM] Marking "renders Retry button and calls onRetry" as passed
[2:20:10 PM] No errors found for "Error component"
[2:20:10 PM] No errors found for "ErrorComponent.test.tsx"
[2:20:10 PM] Marking "submits location with geoPoint when valid coordinates provided" as passed
[2:20:10 PM] Marking "submits location without geoPoint when only one coordinate is provided" as running (state is run)
[2:20:10 PM] Marking "clears location when all fields are emptied" as passed
[2:20:10 PM] Marking "submits location without geoPoint when only address fields provided" as running (state is run)
[2:20:10 PM] Marking "submits location without geoPoint when only one coordinate is provided" as passed
[2:20:10 PM] No errors found for "CreateSampleForm"
[2:20:10 PM] No errors found for "CreateSampleForm.test.tsx"
[2:20:10 PM] Marking "submits location without geoPoint when only address fields provided" as passed
[2:20:10 PM] No errors found for "EditSampleForm"
[2:20:10 PM] No errors found for "EditSampleForm.test.tsx"
[2:20:11 PM] [VSCODE] Flushing 3 created items
[INFO 2:20:11 PM] [DECOR] Reset all decorations.
[2:20:11 PM] No task result for "NavListItemButton.test.tsx", ignoring
[2:20:11 PM] No task result for "NavListItemButton", ignoring
[2:20:11 PM] Enqueuing "renders icon and label when isOpen is true"
[2:20:11 PM] Enqueuing "hides label when isOpen is false"
[2:20:11 PM] Enqueuing "calls onClick when clicked"
[2:20:11 PM] Enqueuing "applies selected prop"
[2:20:11 PM] No errors found for "NavListItemButton.test.tsx"
[2:20:11 PM] No errors found for "NavListItemButton.test.tsx"
[2:20:11 PM] No errors found for "NavListItemButton"
[2:20:11 PM] Marking "renders icon and label when isOpen is true" as passed
[2:20:11 PM] Marking "hides label when isOpen is false" as passed
[2:20:11 PM] Marking "hides label when isOpen is false" as passed
[2:20:11 PM] Marking "calls onClick when clicked" as passed
[2:20:11 PM] Marking "applies selected prop" as passed
[2:20:11 PM] No errors found for "NavListItemButton"
[2:20:11 PM] No errors found for "NavListItemButton.test.tsx"
[2:20:11 PM] No errors found for "NavListItemButton.test.tsx"
[2:20:11 PM] [VSCODE] Flushing 1 created items
[INFO 2:20:12 PM] [DECOR] Reset all decorations.
[2:20:12 PM] No task result for "TopLevelLayout.test.tsx", ignoring
[2:20:12 PM] No task result for "Layout", ignoring
[2:20:12 PM] Enqueuing "renders Header, Sidebar, and main content"
[2:20:12 PM] Enqueuing "toggles Sidebar open state when Header button is clicked"
[2:20:12 PM] Enqueuing "applies correct drawerWidth prop to Sidebar"
[2:20:12 PM] Enqueuing "renders a Container with maxWidth lg"
[2:20:12 PM] No errors found for "TopLevelLayout.test.tsx"
[2:20:12 PM] No errors found for "TopLevelLayout.test.tsx"
[2:20:12 PM] No errors found for "Layout"
[2:20:12 PM] Marking "renders Header, Sidebar, and main content" as passed
[2:20:12 PM] Marking "toggles Sidebar open state when Header button is clicked" as passed
[2:20:12 PM] Marking "applies correct drawerWidth prop to Sidebar" as passed
[INFO 2:20:12 PM] [DECOR] Reset all decorations.
[2:20:12 PM] No task result for "CreateSampleDialog.test.tsx", ignoring
[2:20:12 PM] No task result for "CreateSampleDialog", ignoring
[2:20:12 PM] Enqueuing "renders dialog and title"
[2:20:12 PM] Enqueuing "calls onCancel when cancel button is clicked"
[2:20:12 PM] Enqueuing "calls onCreate and shows success toast on save"
[2:20:12 PM] No errors found for "CreateSampleDialog.test.tsx"
[2:20:12 PM] Marking "applies correct drawerWidth prop to Sidebar" as passed
[2:20:12 PM] Marking "renders a Container with maxWidth lg" as passed
[2:20:12 PM] No errors found for "Layout"
[2:20:12 PM] No errors found for "TopLevelLayout.test.tsx"
[2:20:12 PM] No errors found for "CreateSampleDialog.test.tsx"
[2:20:12 PM] No errors found for "CreateSampleDialog"
[2:20:12 PM] Marking "renders dialog and title" as passed
[INFO 2:20:12 PM] [DECOR] Reset all decorations.
[2:20:12 PM] No task result for "ButtonWithPermission.test.tsx", ignoring
[2:20:12 PM] No task result for "ButtonWithPermission", ignoring
[2:20:12 PM] Enqueuing "renders enabled button when permission is granted"
[2:20:12 PM] Enqueuing "renders disabled button with tooltip when permission is denied"
[2:20:12 PM] Enqueuing "passes additional props to Button"
[2:20:12 PM] No errors found for "ButtonWithPermission.test.tsx"
[2:20:12 PM] Marking "renders dialog and title" as passed
[2:20:12 PM] Marking "calls onCancel when cancel button is clicked" as passed
[2:20:12 PM] Marking "calls onCreate and shows success toast on save" as passed
[2:20:12 PM] No errors found for "CreateSampleDialog"
[2:20:12 PM] No errors found for "CreateSampleDialog.test.tsx"
[2:20:12 PM] No errors found for "ButtonWithPermission.test.tsx"
[2:20:12 PM] No errors found for "ButtonWithPermission"
[2:20:12 PM] Marking "renders enabled button when permission is granted" as passed
[INFO 2:20:12 PM] [DECOR] Reset all decorations.
[2:20:12 PM] No task result for "useFetchSamples.test.tsx", ignoring
[2:20:12 PM] No task result for "useFetchSamples", ignoring
[2:20:12 PM] Enqueuing "fetches samples with and without deleted flag"
[2:20:12 PM] No errors found for "useFetchSamples.test.tsx"
[2:20:13 PM] Marking "renders enabled button when permission is granted" as passed
[2:20:13 PM] Marking "renders disabled button with tooltip when permission is denied" as passed
[2:20:13 PM] Marking "passes additional props to Button" as passed
[2:20:13 PM] No errors found for "ButtonWithPermission"
[2:20:13 PM] No errors found for "ButtonWithPermission.test.tsx"
[2:20:13 PM] No errors found for "useFetchSamples.test.tsx"
[2:20:13 PM] No errors found for "useFetchSamples"
[2:20:13 PM] Marking "fetches samples with and without deleted flag" as running (state is run)
[2:20:13 PM] Marking "fetches samples with and without deleted flag" as passed
[2:20:13 PM] No errors found for "useFetchSamples"
[2:20:13 PM] No errors found for "useFetchSamples.test.tsx"
[2:20:13 PM] [VSCODE] Flushing 4 created items
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "SamplePage.test.tsx", ignoring
[2:20:14 PM] No task result for "SamplePage", ignoring
[2:20:14 PM] Enqueuing "renders title, search, and table"
[2:20:14 PM] Enqueuing "filters samples by search"
[2:20:14 PM] Enqueuing "shows deleted info for deleted samples"
[2:20:14 PM] Enqueuing "renders create button"
[2:20:14 PM] Enqueuing "deletes a sample and allows undo via toast element button"
[2:20:14 PM] Enqueuing "opens create dialog when create button is clicked"
[2:20:14 PM] Enqueuing "opens edit dialog when edit button is clicked"
[2:20:14 PM] Enqueuing "toggles includeDeleted when show/hide deleted button is clicked"
[2:20:14 PM] No errors found for "SamplePage.test.tsx"
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "CardSkeleton.test.tsx", ignoring
[2:20:14 PM] No task result for "CardSkeleton", ignoring
[2:20:14 PM] Enqueuing "renders the card skeleton container"
[2:20:14 PM] Enqueuing "renders two Skeleton components"
[2:20:14 PM] Enqueuing "renders a text variant Skeleton"
[2:20:14 PM] Enqueuing "renders a rounded variant Skeleton"
[2:20:14 PM] No errors found for "CardSkeleton.test.tsx"
[2:20:14 PM] No errors found for "CardSkeleton.test.tsx"
[2:20:14 PM] No errors found for "CardSkeleton"
[2:20:14 PM] Marking "renders the card skeleton container" as passed
[2:20:14 PM] Marking "renders two Skeleton components" as passed
[2:20:14 PM] Marking "renders two Skeleton components" as passed
[2:20:14 PM] Marking "renders a text variant Skeleton" as passed
[2:20:14 PM] Marking "renders a rounded variant Skeleton" as passed
[2:20:14 PM] No errors found for "CardSkeleton"
[2:20:14 PM] No errors found for "CardSkeleton.test.tsx"
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "Header.test.tsx", ignoring
[2:20:14 PM] No task result for "Header", ignoring
[2:20:14 PM] Enqueuing "renders the header title"
[2:20:14 PM] Enqueuing "renders the menu icon button"
[2:20:14 PM] Enqueuing "calls onDrawerToggle when menu icon is clicked"
[2:20:14 PM] No errors found for "Header.test.tsx"
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "useFetchSampleById.test.tsx", ignoring
[2:20:14 PM] No task result for "useFetchSampleById", ignoring
[2:20:14 PM] Enqueuing "fetches a sample by id"
[2:20:14 PM] No errors found for "useFetchSampleById.test.tsx"
[2:20:14 PM] No errors found for "Header.test.tsx"
[2:20:14 PM] No errors found for "Header"
[2:20:14 PM] Marking "renders the header title" as passed
[2:20:14 PM] Marking "renders the header title" as passed
[2:20:14 PM] Marking "renders the menu icon button" as passed
[2:20:14 PM] Marking "calls onDrawerToggle when menu icon is clicked" as passed
[2:20:14 PM] No errors found for "Header"
[2:20:14 PM] No errors found for "Header.test.tsx"
[2:20:14 PM] No errors found for "useFetchSampleById.test.tsx"
[2:20:14 PM] No errors found for "useFetchSampleById"
[2:20:14 PM] Marking "fetches a sample by id" as passed
[2:20:14 PM] Marking "fetches a sample by id" as passed
[2:20:14 PM] No errors found for "useFetchSampleById"
[2:20:14 PM] No errors found for "useFetchSampleById.test.tsx"
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "App.unmocked.test.tsx", ignoring
[2:20:14 PM] No task result for "App (unmocked)", ignoring
[2:20:14 PM] Enqueuing "renders the real component tree end-to-end without mocking application code"
[2:20:14 PM] [VSCODE] Flushing 1 created items
[INFO 2:20:14 PM] [DECOR] Reset all decorations.
[2:20:14 PM] No task result for "Sidebar.test.tsx", ignoring
[2:20:14 PM] No task result for "Sidebar", ignoring
[2:20:14 PM] Enqueuing "renders all nav items"
[2:20:14 PM] Enqueuing "shows label when sidebar is open"
[2:20:14 PM] Enqueuing "does not show label when sidebar is closed"
[2:20:14 PM] Enqueuing "calls onNavigate with correct path when nav item is clicked"
[2:20:14 PM] Enqueuing "marks the selected nav item"
[2:20:14 PM] No errors found for "App.unmocked.test.tsx"
[2:20:14 PM] No errors found for "Sidebar.test.tsx"
[2:20:14 PM] No errors found for "Sidebar.test.tsx"
[2:20:14 PM] No errors found for "Sidebar"
[2:20:14 PM] Marking "renders all nav items" as passed
[2:20:15 PM] Marking "shows label when sidebar is open" as passed
[2:20:15 PM] Marking "does not show label when sidebar is closed" as passed
[2:20:15 PM] Marking "calls onNavigate with correct path when nav item is clicked" as passed
[2:20:15 PM] Marking "calls onNavigate with correct path when nav item is clicked" as passed
[2:20:15 PM] Marking "marks the selected nav item" as passed
[2:20:15 PM] No errors found for "Sidebar"
[2:20:15 PM] No errors found for "Sidebar.test.tsx"
[2:20:15 PM] No errors found for "SamplePage.test.tsx"
[2:20:15 PM] No errors found for "SamplePage"
[2:20:15 PM] Marking "renders title, search, and table" as passed
[2:20:15 PM] [VSCODE] Flushing 3 created items
[2:20:15 PM] Marking "renders title, search, and table" as passed
[2:20:15 PM] Marking "filters samples by search" as running (state is run)
[2:20:15 PM] Marking "filters samples by search" as passed
[2:20:15 PM] Marking "shows deleted info for deleted samples" as passed
[2:20:15 PM] Marking "shows deleted info for deleted samples" as passed
[2:20:15 PM] Marking "renders create button" as passed
[2:20:16 PM] Marking "renders create button" as passed
[2:20:16 PM] Marking "deletes a sample and allows undo via toast element button" as passed
[2:20:16 PM] No errors found for "App.unmocked.test.tsx"
[2:20:16 PM] No errors found for "App (unmocked)"
[2:20:16 PM] Marking "renders the real component tree end-to-end without mocking application code" as running (state is run)
[INFO 2:20:16 PM] [DECOR] Reset all decorations.
[2:20:16 PM] No task result for "ErrorBoundary.test.tsx", ignoring
[2:20:16 PM] No task result for "ErrorBoundary", ignoring
[2:20:16 PM] Enqueuing "renders children when no error is thrown"
[2:20:16 PM] Enqueuing "renders fallback UI when error is thrown"
[2:20:16 PM] Enqueuing "calls onRetry when retry button is clicked"
[2:20:16 PM] No errors found for "ErrorBoundary.test.tsx"
[2:20:16 PM] Marking "deletes a sample and allows undo via toast element button" as passed
[2:20:16 PM] Marking "opens create dialog when create button is clicked" as passed
[2:20:16 PM] No errors found for "ErrorBoundary.test.tsx"
[2:20:16 PM] No errors found for "ErrorBoundary"
[2:20:16 PM] Marking "renders children when no error is thrown" as passed
[2:20:16 PM] Marking "renders fallback UI when error is thrown" as passed
[2:20:16 PM] Marking "calls onRetry when retry button is clicked" as passed
[INFO 2:20:16 PM] [DECOR] Reset all decorations.
[2:20:16 PM] No task result for "DialogProvider.test.tsx", ignoring
[2:20:16 PM] No task result for "DialogProvider", ignoring
[2:20:16 PM] Enqueuing "renders children"
[2:20:16 PM] Enqueuing "shows dialog when showDialog is called"
[2:20:16 PM] Enqueuing "hides dialog when hideDialog is called"
[2:20:16 PM] No errors found for "DialogProvider.test.tsx"
[2:20:16 PM] Marking "renders the real component tree end-to-end without mocking application code" as passed
[2:20:16 PM] No errors found for "App (unmocked)"
[2:20:16 PM] No errors found for "App.unmocked.test.tsx"
[2:20:16 PM] Marking "calls onRetry when retry button is clicked" as passed
[2:20:16 PM] No errors found for "ErrorBoundary"
[2:20:16 PM] No errors found for "ErrorBoundary.test.tsx"
[INFO 2:20:16 PM] [DECOR] Reset all decorations.
[2:20:16 PM] No task result for "ErrorFallback.test.tsx", ignoring
[2:20:16 PM] No task result for "ErrorFallback", ignoring
[2:20:16 PM] Enqueuing "renders the fallback UI with error message (string)"
[2:20:16 PM] Enqueuing "renders the fallback UI with error object"
[2:20:16 PM] Enqueuing "calls resetErrorBoundary when retry button is clicked"
[2:20:16 PM] No errors found for "ErrorFallback.test.tsx"
[2:20:16 PM] No errors found for "DialogProvider.test.tsx"
[2:20:16 PM] No errors found for "DialogProvider"
[2:20:16 PM] Marking "renders children" as passed
[2:20:16 PM] Marking "shows dialog when showDialog is called" as passed
[2:20:16 PM] Marking "hides dialog when hideDialog is called" as passed
[2:20:16 PM] Marking "opens create dialog when create button is clicked" as passed
[2:20:16 PM] Marking "opens edit dialog when edit button is clicked" as passed
[2:20:16 PM] No errors found for "DialogProvider.test.tsx"
[2:20:16 PM] No errors found for "ErrorFallback.test.tsx"
[2:20:16 PM] No errors found for "ErrorFallback"
[2:20:16 PM] Marking "renders the fallback UI with error message (string)" as passed
[2:20:16 PM] Marking "renders the fallback UI with error object" as passed
[2:20:16 PM] Marking "renders the fallback UI with error object" as passed
[2:20:16 PM] Marking "calls resetErrorBoundary when retry button is clicked" as passed
[2:20:16 PM] No errors found for "ErrorFallback"
[2:20:16 PM] No errors found for "ErrorFallback.test.tsx"
[2:20:16 PM] Marking "opens edit dialog when edit button is clicked" as passed
[2:20:16 PM] Marking "toggles includeDeleted when show/hide deleted button is clicked" as passed
[2:20:16 PM] Marking "toggles includeDeleted when show/hide deleted button is clicked" as passed
[2:20:16 PM] No errors found for "SamplePage"
[2:20:16 PM] No errors found for "SamplePage.test.tsx"
[INFO 2:20:16 PM] [DECOR] Reset all decorations.
[2:20:16 PM] No task result for "overlay.test.tsx", ignoring
[2:20:16 PM] No task result for "Overlay", ignoring
[2:20:16 PM] Enqueuing "renders children"
[2:20:16 PM] Enqueuing "shows overlay and spinner when isVisible is true"
[2:20:16 PM] Enqueuing "does not show overlay when isVisible is false"
[2:20:16 PM] No errors found for "overlay.test.tsx"
[2:20:17 PM] No errors found for "overlay.test.tsx"
[2:20:17 PM] No errors found for "Overlay"
[2:20:17 PM] Marking "renders children" as passed
[2:20:17 PM] Marking "shows overlay and spinner when isVisible is true" as passed
[2:20:17 PM] Marking "does not show overlay when isVisible is false" as passed
[2:20:17 PM] [VSCODE] Flushing 6 created items
[INFO 2:20:17 PM] [DECOR] Reset all decorations.
[2:20:17 PM] No task result for "main.test.tsx", ignoring
[2:20:17 PM] No task result for "main.tsx", ignoring
[2:20:17 PM] Enqueuing "renders the app entrypoint correctly"
[2:20:17 PM] No errors found for "main.test.tsx"
[INFO 2:20:17 PM] [DECOR] Reset all decorations.
[2:20:17 PM] No task result for "FederationHosting.test.tsx", ignoring
[2:20:17 PM] No task result for "FederationHosting", ignoring
[2:20:17 PM] Enqueuing "renders all expected wrapper components"
[2:20:17 PM] No errors found for "FederationHosting.test.tsx"
[INFO 2:20:17 PM] [DECOR] Reset all decorations.
[2:20:17 PM] No task result for "index.test.tsx", ignoring
[2:20:17 PM] No task result for "QueryProvider", ignoring
[2:20:17 PM] Enqueuing "renders children"
[2:20:17 PM] Enqueuing "renders devtools in debug mode"
[2:20:17 PM] Enqueuing "does not render devtools when not in debug mode"
[2:20:17 PM] No errors found for "index.test.tsx"
[2:20:17 PM] No errors found for "main.test.tsx"
[2:20:17 PM] No errors found for "main.tsx"
[2:20:17 PM] Marking "renders the app entrypoint correctly" as passed
[2:20:17 PM] No errors found for "FederationHosting.test.tsx"
[2:20:17 PM] No errors found for "FederationHosting"
[2:20:17 PM] Marking "renders all expected wrapper components" as passed
[2:20:17 PM] No errors found for "index.test.tsx"
[2:20:17 PM] No errors found for "QueryProvider"
[2:20:17 PM] Marking "renders children" as passed
[2:20:17 PM] Marking "renders devtools in debug mode" as passed
[2:20:17 PM] Marking "does not render devtools when not in debug mode" as passed
[INFO 2:20:17 PM] [DECOR] Reset all decorations.
[2:20:17 PM] No task result for "Can.test.tsx", ignoring
[2:20:17 PM] No task result for "Can component", ignoring
[2:20:17 PM] Enqueuing "renders children when permission is granted"
[2:20:17 PM] Enqueuing "does not render children when permission is denied"
[2:20:17 PM] Enqueuing "renders children when "not" prop is used and permission is denied"
[2:20:17 PM] Enqueuing "does not render children when "not" prop is used and permission is granted"
[2:20:17 PM] No errors found for "Can.test.tsx"
[2:20:18 PM] No errors found for "Can.test.tsx"
[2:20:18 PM] No errors found for "Can component"
[2:20:18 PM] Marking "renders children when permission is granted" as passed
[2:20:18 PM] Marking "does not render children when permission is denied" as passed
[2:20:18 PM] Marking "renders children when "not" prop is used and permission is denied" as passed
[2:20:18 PM] Marking "does not render children when "not" prop is used and permission is granted" as passed
[INFO 2:20:18 PM] [DECOR] Reset all decorations.
[2:20:18 PM] No task result for "LocalizationProvider.test.tsx", ignoring
[2:20:18 PM] No task result for "LocalizationProvider", ignoring
[2:20:18 PM] Enqueuing "renders children with IntlProvider"
[2:20:18 PM] Enqueuing "calls initializeLocalization on mount"
[2:20:18 PM] Enqueuing "forces language of runtime information"
[2:20:18 PM] No errors found for "LocalizationProvider.test.tsx"
[2:20:18 PM] No errors found for "LocalizationProvider.test.tsx"
[2:20:18 PM] No errors found for "LocalizationProvider"
[2:20:18 PM] Marking "renders children with IntlProvider" as passed
[2:20:18 PM] Marking "calls initializeLocalization on mount" as passed
[2:20:18 PM] Marking "forces language of runtime information" as passed
[INFO 2:20:18 PM] [DECOR] Reset all decorations.
[2:20:18 PM] No task result for "useDeleteSample.test.tsx", ignoring
[2:20:18 PM] No task result for "useDeleteSample", ignoring
[2:20:18 PM] Enqueuing "deletes a sample and re-fetches list & item queries"
[2:20:18 PM] No errors found for "useDeleteSample.test.tsx"
[2:20:18 PM] No errors found for "useDeleteSample.test.tsx"
[2:20:18 PM] No errors found for "useDeleteSample"
[2:20:18 PM] Marking "deletes a sample and re-fetches list & item queries" as passed
[2:20:18 PM] [VSCODE] Flushing 5 created items
[2:20:19 PM] [VSCODE] Flushing 1 created items
[INFO 2:20:19 PM] [DECOR] Reset all decorations.
[2:20:19 PM] No task result for "useDialog.test.tsx", ignoring
[2:20:19 PM] No task result for "useDialog", ignoring
[2:20:19 PM] Enqueuing "throws if not used within DialogProvider"
[2:20:19 PM] Enqueuing "returns context value when used within DialogProvider"
[2:20:19 PM] No errors found for "useDialog.test.tsx"
[2:20:19 PM] No errors found for "useDialog.test.tsx"
[2:20:19 PM] No errors found for "useDialog"
[2:20:19 PM] Marking "throws if not used within DialogProvider" as passed
[2:20:19 PM] Marking "returns context value when used within DialogProvider" as passed
[INFO 2:20:19 PM] [DECOR] Reset all decorations.
[2:20:19 PM] No task result for "useUpdateSample.test.tsx", ignoring
[2:20:19 PM] No task result for "useUpdateSample", ignoring
[2:20:19 PM] Enqueuing "updates a sample and re-fetches related queries"
[2:20:19 PM] No errors found for "useUpdateSample.test.tsx"
[INFO 2:20:19 PM] [DECOR] Reset all decorations.
[2:20:19 PM] No task result for "useCreateSample.test.tsx", ignoring
[2:20:19 PM] No task result for "useCreateSample", ignoring
[2:20:19 PM] Enqueuing "creates a sample and re-fetches list queries"
[2:20:19 PM] No errors found for "useCreateSample.test.tsx"
[2:20:19 PM] No errors found for "useUpdateSample.test.tsx"
[2:20:19 PM] No errors found for "useUpdateSample"
[2:20:19 PM] Marking "updates a sample and re-fetches related queries" as passed
[2:20:19 PM] No errors found for "useCreateSample.test.tsx"
[2:20:19 PM] No errors found for "useCreateSample"
[2:20:19 PM] Marking "creates a sample and re-fetches list queries" as passed
[INFO 2:20:19 PM] [DECOR] Reset all decorations.
[2:20:19 PM] No task result for "useUndeleteSample.test.tsx", ignoring
[2:20:19 PM] No task result for "useUndeleteSample", ignoring
[2:20:19 PM] Enqueuing "un-deletes a sample and invalidates samples query"
[2:20:19 PM] No errors found for "useUndeleteSample.test.tsx"
[INFO 2:20:19 PM] [DECOR] Reset all decorations.
[2:20:19 PM] No task result for "PermissionsProvider.test.tsx", ignoring
[2:20:19 PM] No task result for "PermissionsProvider", ignoring
[2:20:19 PM] Enqueuing "provides permissions from usePermissions"
[2:20:19 PM] Enqueuing "falls back to defaultPermissions if permissions is undefined"
[2:20:19 PM] No errors found for "PermissionsProvider.test.tsx"
[2:20:19 PM] No errors found for "useUndeleteSample.test.tsx"
[2:20:19 PM] No errors found for "useUndeleteSample"
[2:20:19 PM] Marking "un-deletes a sample and invalidates samples query" as passed
[2:20:19 PM] No errors found for "PermissionsProvider.test.tsx"
[2:20:19 PM] No errors found for "PermissionsProvider"
[2:20:19 PM] Marking "provides permissions from usePermissions" as passed
[2:20:19 PM] Marking "falls back to defaultPermissions if permissions is undefined" as passed
[INFO 2:20:20 PM] [DECOR] Reset all decorations.
[2:20:20 PM] No task result for "Version.test.tsx", ignoring
[2:20:20 PM] No task result for "Version", ignoring
[2:20:20 PM] Enqueuing "renders the version"
[2:20:20 PM] No errors found for "Version.test.tsx"
[2:20:20 PM] No errors found for "Version.test.tsx"
[2:20:20 PM] No errors found for "Version"
[2:20:20 PM] Marking "renders the version" as passed
[2:20:20 PM] [VSCODE] Flushing 5 created items
[2:20:20 PM] [VSCODE] Flushing 1 created items
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "SampleRemoteComponent.test.tsx", ignoring
[2:20:21 PM] No task result for "SampleRemoteComponent", ignoring
[2:20:21 PM] Enqueuing "renders Sample Component within FederationHosting"
[2:20:21 PM] No errors found for "SampleRemoteComponent.test.tsx"
[2:20:21 PM] No errors found for "SampleRemoteComponent.test.tsx"
[2:20:21 PM] No errors found for "SampleRemoteComponent"
[2:20:21 PM] Marking "renders Sample Component within FederationHosting" as passed
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "AbilityContext.test.tsx", ignoring
[2:20:21 PM] No task result for "AbilityContext", ignoring
[2:20:21 PM] Enqueuing "should have defaultPermissions as default value"
[2:20:21 PM] No errors found for "AbilityContext.test.tsx"
[2:20:21 PM] No errors found for "AbilityContext.test.tsx"
[2:20:21 PM] No errors found for "AbilityContext"
[2:20:21 PM] Marking "should have defaultPermissions as default value" as passed
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "SharedEventStreamService.test.tsx", ignoring
[2:20:21 PM] No task result for "SharedEventStreamService (adopted from SSE handler tests)", ignoring
[2:20:21 PM] Enqueuing "uses authenticated fetch provided by ApiConfigurationProvider"
[2:20:21 PM] Enqueuing "registers and calls callbacks on matching message topic"
[2:20:21 PM] Enqueuing "registers and calls callbacks for sample topic messages"
[2:20:21 PM] Enqueuing "registers and calls callbacks for sample messages with empty payload"
[2:20:21 PM] Enqueuing "ignores unknown topic events"
[2:20:21 PM] Enqueuing "clears subscriptions on dispose and no longer invokes callbacks"
[2:20:21 PM] Enqueuing "calls unsubscribe and removes callback and topic"
[2:20:21 PM] Enqueuing "ignores heartbeat events with raw string payload"
[2:20:21 PM] Enqueuing "handles invalid JSON in onmessage and logs error"
[2:20:21 PM] Enqueuing "handles onopen with valid and invalid responses"
[2:20:21 PM] Enqueuing "handles onerror and triggers reconnect logic"
[2:20:21 PM] Enqueuing "returns early in onerror when service is disposed"
[2:20:21 PM] No errors found for "SharedEventStreamService.test.tsx"
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "SampleApi.test.ts", ignoring
[2:20:21 PM] No task result for "SampleApi", ignoring
[2:20:21 PM] Enqueuing "should instantiate SampleApi, subscribe to sample events, and unregister on dispose"
[2:20:21 PM] Enqueuing "should only unregister SSE once when disposed multiple times"
[2:20:21 PM] Enqueuing "should safely dispose when SSE subscribe returns no unregister callback"
[2:20:21 PM] Enqueuing "should process SSE events by logging and invalidating sample queries"
[2:20:21 PM] Enqueuing "should log an error when sample query invalidation fails"
[2:20:21 PM] No errors found for "SampleApi.test.ts"
[2:20:21 PM] No errors found for "SharedEventStreamService.test.tsx"
[2:20:21 PM] No errors found for "SharedEventStreamService (adopted from SSE handler tests)"
[2:20:21 PM] Marking "uses authenticated fetch provided by ApiConfigurationProvider" as passed
[2:20:21 PM] Marking "registers and calls callbacks on matching message topic" as passed
[2:20:21 PM] Marking "registers and calls callbacks for sample topic messages" as passed
[2:20:21 PM] Marking "registers and calls callbacks for sample messages with empty payload" as passed
[2:20:21 PM] Marking "ignores unknown topic events" as passed
[2:20:21 PM] Marking "clears subscriptions on dispose and no longer invokes callbacks" as passed
[2:20:21 PM] Marking "calls unsubscribe and removes callback and topic" as passed
[2:20:21 PM] Marking "ignores heartbeat events with raw string payload" as passed
[2:20:21 PM] Marking "handles invalid JSON in onmessage and logs error" as passed
[2:20:21 PM] Marking "handles onopen with valid and invalid responses" as passed
[2:20:21 PM] Marking "handles onerror and triggers reconnect logic" as passed
[2:20:21 PM] Marking "returns early in onerror when service is disposed" as passed
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "App.test.tsx", ignoring
[2:20:21 PM] No task result for "App", ignoring
[2:20:21 PM] Enqueuing "renders TopLevelLayout with correct title"
[2:20:21 PM] No errors found for "App.test.tsx"
[2:20:21 PM] No errors found for "SampleApi.test.ts"
[2:20:21 PM] No errors found for "SampleApi"
[2:20:21 PM] Marking "should instantiate SampleApi, subscribe to sample events, and unregister on dispose" as passed
[2:20:21 PM] Marking "should only unregister SSE once when disposed multiple times" as passed
[2:20:21 PM] Marking "should safely dispose when SSE subscribe returns no unregister callback" as passed
[2:20:21 PM] Marking "should process SSE events by logging and invalidating sample queries" as passed
[2:20:21 PM] Marking "should log an error when sample query invalidation fails" as passed
[2:20:21 PM] No errors found for "App.test.tsx"
[2:20:21 PM] No errors found for "App"
[2:20:21 PM] Marking "renders TopLevelLayout with correct title" as passed
[INFO 2:20:21 PM] [DECOR] Reset all decorations.
[2:20:21 PM] No task result for "AuthenticationAwareFetchHandler.test.ts", ignoring
[2:20:21 PM] No task result for "AuthenticationAwareFetchHandler", ignoring
[2:20:21 PM] Enqueuing "sends request once without Authorization when no token is available"
[2:20:21 PM] Enqueuing "attaches Authorization and does not retry when initial response is not unauthorized"
[2:20:21 PM] Enqueuing "retries once with refreshed token when initial response is unauthorized"
[2:20:21 PM] Enqueuing "returns initial unauthorized response when refresh yields no token"
[2:20:21 PM] No errors found for "AuthenticationAwareFetchHandler.test.ts"
[2:20:21 PM] No errors found for "AuthenticationAwareFetchHandler.test.ts"
[2:20:21 PM] No errors found for "AuthenticationAwareFetchHandler"
[2:20:21 PM] Marking "sends request once without Authorization when no token is available" as passed
[2:20:21 PM] Marking "attaches Authorization and does not retry when initial response is not unauthorized" as passed
[2:20:21 PM] Marking "retries once with refreshed token when initial response is unauthorized" as passed
[2:20:21 PM] Marking "returns initial unauthorized response when refresh yields no token" as passed
[2:20:22 PM] [VSCODE] Flushing 6 created items
[INFO 2:20:22 PM] [DECOR] Reset all decorations.
[2:20:22 PM] No task result for "locationUtilities.test.ts", ignoring
[2:20:22 PM] No task result for "locationUtils", ignoring
[2:20:22 PM] No task result for "buildLocationFromFields", ignoring
[2:20:22 PM] Enqueuing "returns null when all fields are empty"
[2:20:22 PM] Enqueuing "builds location with address only"
[2:20:22 PM] Enqueuing "builds location with coordinates"
[2:20:22 PM] Enqueuing "excludes geoPoint when only one coordinate provided"
[2:20:22 PM] Enqueuing "returns null when only whitespace provided"
[2:20:22 PM] No task result for "flattenLocation", ignoring
[2:20:22 PM] Enqueuing "returns empty fields for null location"
[2:20:22 PM] Enqueuing "returns empty fields for undefined location"
[2:20:22 PM] Enqueuing "flattens location with all fields"
[2:20:22 PM] Enqueuing "handles location without geoPoint"
[2:20:22 PM] No task result for "getEmptyLocationFields", ignoring
[2:20:22 PM] Enqueuing "returns all empty location fields"
[2:20:22 PM] No errors found for "locationUtilities.test.ts"
[2:20:22 PM] No errors found for "locationUtilities.test.ts"
[2:20:22 PM] No errors found for "locationUtils"
[2:20:22 PM] No errors found for "buildLocationFromFields"
[2:20:22 PM] Marking "returns null when all fields are empty" as passed
[2:20:22 PM] Marking "builds location with address only" as passed
[2:20:22 PM] Marking "builds location with coordinates" as passed
[2:20:22 PM] Marking "excludes geoPoint when only one coordinate provided" as passed
[2:20:22 PM] Marking "returns null when only whitespace provided" as passed
[2:20:22 PM] No errors found for "flattenLocation"
[2:20:22 PM] Marking "returns empty fields for null location" as passed
[2:20:22 PM] Marking "returns empty fields for undefined location" as passed
[2:20:22 PM] Marking "flattens location with all fields" as passed
[2:20:22 PM] Marking "handles location without geoPoint" as passed
[2:20:22 PM] No errors found for "getEmptyLocationFields"
[2:20:22 PM] Marking "returns all empty location fields" as passed
[INFO 2:20:22 PM] [DECOR] Reset all decorations.
[2:20:22 PM] No task result for "AuthenticationAwareHttpHandler.test.ts", ignoring
[2:20:22 PM] No task result for "AuthenticationAwareHttpHandler", ignoring
[2:20:22 PM] Enqueuing "sends request once without Authorization when no token is available"
[2:20:22 PM] Enqueuing "attaches Authorization and does not retry when initial response is not unauthorized"
[2:20:22 PM] Enqueuing "retries once with a refreshed token when initial response is unauthorized"
[2:20:22 PM] Enqueuing "returns initial unauthorized response when refresh after unauthorized yields no token"
[2:20:22 PM] Enqueuing "requests token for each concurrent request and applies the resolved token"
[2:20:22 PM] No errors found for "AuthenticationAwareHttpHandler.test.ts"
[2:20:22 PM] No errors found for "AuthenticationAwareHttpHandler.test.ts"
[2:20:22 PM] No errors found for "AuthenticationAwareHttpHandler"
[2:20:22 PM] Marking "sends request once without Authorization when no token is available" as passed
[2:20:22 PM] Marking "attaches Authorization and does not retry when initial response is not unauthorized" as passed
[2:20:22 PM] Marking "retries once with a refreshed token when initial response is unauthorized" as passed
[2:20:22 PM] Marking "returns initial unauthorized response when refresh after unauthorized yields no token" as passed
[2:20:22 PM] Marking "requests token for each concurrent request and applies the resolved token" as passed
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "PermissionApi.test.ts", ignoring
[2:20:23 PM] No task result for "PermissionApi", ignoring
[2:20:23 PM] Enqueuing "should instantiate PermissionApi and call getMyPermission"
[2:20:23 PM] No errors found for "PermissionApi.test.ts"
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "localization.test.ts", ignoring
[2:20:23 PM] No task result for "initializeLocalization", ignoring
[2:20:23 PM] Enqueuing "should call languageChanged with current language"
[2:20:23 PM] Enqueuing "should register languageChanged event handler"
[2:20:23 PM] Enqueuing "should call changeLanguage if effective language differs"
[2:20:23 PM] Enqueuing "should call changeLanguage if language is changed within session"
[2:20:23 PM] Enqueuing "should NOT call changeLanguage if language in changed event is the same as before"
[2:20:23 PM] No errors found for "localization.test.ts"
[2:20:23 PM] No errors found for "PermissionApi.test.ts"
[2:20:23 PM] No errors found for "PermissionApi"
[2:20:23 PM] Marking "should instantiate PermissionApi and call getMyPermission" as passed
[2:20:23 PM] No errors found for "localization.test.ts"
[2:20:23 PM] No errors found for "initializeLocalization"
[2:20:23 PM] Marking "should call languageChanged with current language" as passed
[2:20:23 PM] Marking "should register languageChanged event handler" as passed
[2:20:23 PM] Marking "should call changeLanguage if effective language differs" as passed
[2:20:23 PM] Marking "should call changeLanguage if language is changed within session" as passed
[2:20:23 PM] Marking "should NOT call changeLanguage if language in changed event is the same as before" as passed
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "permissionQueryMap.test.ts", ignoring
[2:20:23 PM] No task result for "permissionQueryKey", ignoring
[2:20:23 PM] Enqueuing "returns the expected query key array"
[2:20:23 PM] Enqueuing "returns a new array instance each time"
[2:20:23 PM] No errors found for "permissionQueryMap.test.ts"
[2:20:23 PM] No errors found for "permissionQueryMap.test.ts"
[2:20:23 PM] No errors found for "permissionQueryKey"
[2:20:23 PM] Marking "returns the expected query key array" as passed
[2:20:23 PM] Marking "returns a new array instance each time" as passed
[2:20:23 PM] [VSCODE] Flushing 2 created items
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "ApiConfigurationProvider.test.ts", ignoring
[2:20:23 PM] No task result for "ApiConfigurationProvider", ignoring
[2:20:23 PM] Enqueuing "creates configuration with runtime base URL and authentication-aware HTTP handler"
[2:20:23 PM] No errors found for "ApiConfigurationProvider.test.ts"
[2:20:23 PM] No errors found for "ApiConfigurationProvider.test.ts"
[2:20:23 PM] No errors found for "ApiConfigurationProvider"
[2:20:23 PM] Marking "creates configuration with runtime base URL and authentication-aware HTTP handler" as passed
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "DialogOptions.test.ts", ignoring
[2:20:23 PM] No task result for "DialogOptions interface", ignoring
[2:20:23 PM] Enqueuing "should allow clickOutsideDialogBehavior as enum or function"
[2:20:23 PM] [VSCODE] Flushing 4 created items
[2:20:23 PM] No errors found for "DialogOptions.test.ts"
[2:20:23 PM] No errors found for "DialogOptions.test.ts"
[2:20:23 PM] No errors found for "DialogOptions interface"
[2:20:23 PM] Marking "should allow clickOutsideDialogBehavior as enum or function" as passed
[INFO 2:20:23 PM] [DECOR] Reset all decorations.
[2:20:23 PM] No task result for "DialogHookFunctions.test.ts", ignoring
[2:20:23 PM] No task result for "DialogHookFunctions interface", ignoring
[2:20:23 PM] Enqueuing "should define showDialog and hideDialog methods"
[2:20:23 PM] No errors found for "DialogHookFunctions.test.ts"
[2:20:24 PM] No errors found for "DialogHookFunctions.test.ts"
[2:20:24 PM] No errors found for "DialogHookFunctions interface"
[2:20:24 PM] Marking "should define showDialog and hideDialog methods" as passed
[INFO 2:20:24 PM] [DECOR] Reset all decorations.
[2:20:24 PM] No task result for "ClickOutsideDialogBehavior.test.ts", ignoring
[2:20:24 PM] No task result for "ClickOutsideDialogBehavior", ignoring
[2:20:24 PM] Enqueuing "should have Close and Ignore enum values"
[2:20:24 PM] No errors found for "ClickOutsideDialogBehavior.test.ts"
[2:20:24 PM] No errors found for "ClickOutsideDialogBehavior.test.ts"
[2:20:24 PM] No errors found for "ClickOutsideDialogBehavior"
[2:20:24 PM] Marking "should have Close and Ignore enum values" as passed
[2:20:24 PM] Ending test run
[2:20:24 PM] [WORKER] JUNIT report written to C:/workspace/git/node-service-template/frontend/dist/test-results.xml
[2:20:24 PM] [WORKER] % Coverage report from v8
[Error 2:20:24 PM] TypeError: Cannot read properties of undefined (reading 'branchMap')
at fn.reportCoverage (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\extension.js:4934:25)
at c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\extension.js:4818:25
at c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\extension.js:3759:41
at Array.forEach (<anonymous>)
at Object.trigger [as onTestRunEnd] (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\extension.js:3759:26)
at e.x (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:1298)
at e.emit (node:events:514:28)
at e.o.t.exports.ae (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:38577)
at e.o.t.exports.emit (node:events:514:28)
at e.o.t.exports.dataMessage (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:16501)
at e.o.t.exports.getData (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:15398)
at e.o.t.exports.startLoop (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:12110)
at e.o.t.exports._write (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:11402)
at writeOrBuffer (node:internal/streams/writable:574:12)
at _write (node:internal/streams/writable:503:10)
at Writable.write (node:internal/streams/writable:512:10)
at Socket.Z (c:\Users\RalfP\.vscode\extensions\vitest.explorer-1.52.0\dist\esm-219GbSo2.js:1:39601)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:567:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:518:3)
at Readable.push (node:internal/streams/readable:398:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
[2:20:24 PM] [VSCODE] Flushing 4 created items
[2:20:24 PM] [VSCODE] Flushing 3 changed items
[2:20:25 PM] [WORKER] -------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------------|---------|----------|---------|---------|-------------------
All files | 94.31 | 87.84 | 90.06 | 94.33 |
.... file appears in this list with coverage > 0 ....
-------------------|---------|----------|---------|---------|-------------------
PASS Waiting for file changes...
press h to show help, press q to quit
[2:20:25 PM] Disposing test runner
[2:20:25 PM] [API] Vitest WebSocket connection closed, cannot call RPC anymore.
[2:20:25 PM] [VSCODE] Flushing 3 changed items
[2:20:25 PM] [VSCODE] Flushing 342 created items
[2:20:26 PM] [VSCODE] Flushing 1 deleted items
Extension Version
1.52.0
Vitest Version
5.0.1
Validations
Describe the bug
Environment:
vitest.explorer version: 1.52.0
vitest: 5.0.1, @vitest/coverage-v8: ^5.0.1, vite: ^7.0.0, reproduceable with vitest 4.0.4
VS-Code: 1.139.0
Node: 24.20
OS: Windows, reproduceable on Mac
Coverage config: provider: 'v8', with an explicit coverage.include glob (source/**/*.{ts,tsx})
Since when
This happend since today an seems to be related to a vs-code / vitest extension update.
Before this problem we had this problem: #826
Currently we have applied the mentioned workaround.
So, this may be a related problem or followup error caused by the workaround for 826.
Scenario
Running "Run All Tests with Coverage" via the Test Explorer intermittently crashes with:
TypeError: Cannot read properties of undefined (reading 'branchMap')
at fn.reportCoverage (extension.js:...)
at Object.trigger [as onTestRunEnd] (extension.js:...)
...
at Object.exports.dataMessage (esm-....js:...)
at Object.exports.getData (esm-....js:...)
at Object.exports.startLoop (esm-....js:...)
at Socket.emit (node:events:...)
It does not happen on every run, and CLI vitest run --coverage never reproduces it — only the Test Explorer's live coverage reporting is affected. Actual coverage output on disk (lcov.info, etc.) is always valid.
Root cause (confirmed by instrumenting the installed extension locally)
In reportCoverage(e), the code unconditionally does:
By throwing a diagnostic error at the crash site, we confirmed that at least one entry in the coverage map passed to reportCoverage is not wrapped in { data: ... } — it arrives as the raw FileCoverageData object directly (keys: path, statementMap, fnMap, branchMap, s, f, b, meta). So e[t].data is undefined for that entry, and the subsequent r.branchMap access throws.
This was observed for a file with its own dedicated, passing unit test — so it's not limited to files with zero coverage. It appears to depend on timing/ordering of vitest's incremental coverage reporting during a full run (i.e., some entries may be delivered as already-finalized Istanbul objects rather than the raw-data-wrapped shape, depending on when/how that file's coverage was collected relative to the reporting tick).
Workaround that works in our case
We patched this locally in the installed extension and it resolved the crash for us, but it's a workaround rather than a proper fix (we don't know why the entry arrives unwrapped in the first place, and this only handles that one specific shape — anything else still throws as before).
Expected behavior
No crash ;-)
Reproduction
Sorry, No minimal repro (timing-dependent / intermittent). Happy to help narrow it down further if useful — can reliably trigger it in a mid-sized React + Vite + Vitest project with coverage.provider: 'v8' and an explicit coverage.include glob. But cannot share any code
Output
Extension Version
1.52.0
Vitest Version
5.0.1
Validations