Bug Report
Vitest version: 4.1.0
Regression from: 4.0.18 (works correctly)
Environment: Node 22, happy-dom
Description
In Vitest 4.1.0, calling vi.mock with importOriginal (or vi.importActual) on a package listed in test.server.deps.inline causes ERR_MODULE_NOT_FOUND. The module evaluator appends &v=<hash> directly to the resolved file path, producing a path that does not exist on disk.
The same error occurs when the package is in test.deps.optimizer.client.include — the pre-bundled chunk path also gets the suffix appended.
This is a regression — identical configuration works correctly on 4.0.18.
Minimal reproduction
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
environment: 'happy-dom',
server: {
deps: {
inline: ['react-redux'],
},
},
},
});
// some.test.ts
vi.mock('react-redux', async (importOriginal) => ({
...(await importOriginal()),
useSelector: vi.fn(),
}));
test('example', () => {});
Error output
Error: [vitest] There was an error when mocking a module.
Caused by: Error: Cannot find module '/node_modules/react-redux/dist/react-redux.mjs&v=c1c7e391'
{ code: 'ERR_MODULE_NOT_FOUND' }
The &v=<hash> suffix is appended to the literal resolved file path by the module evaluator, making it unresolvable on disk.
When the package is instead added to test.deps.optimizer.client.include, the pre-bundled chunk gets the same treatment:
Error: Cannot find module '/node_modules/.vite/vitest/.../deps/react-redux.js&v=8f02ed9a'
{ code: 'ERR_MODULE_NOT_FOUND' }
Expected behavior
importOriginal / vi.importActual should resolve the module correctly regardless of whether it is listed in server.deps.inline or optimizer.client.include, as it did in 4.0.x.
Workaround
Pinning to ~4.0.0 via overrides in package.json resolves the issue.
Bug Report
Vitest version: 4.1.0
Regression from: 4.0.18 (works correctly)
Environment: Node 22, happy-dom
Description
In Vitest 4.1.0, calling
vi.mockwithimportOriginal(orvi.importActual) on a package listed intest.server.deps.inlinecausesERR_MODULE_NOT_FOUND. The module evaluator appends&v=<hash>directly to the resolved file path, producing a path that does not exist on disk.The same error occurs when the package is in
test.deps.optimizer.client.include— the pre-bundled chunk path also gets the suffix appended.This is a regression — identical configuration works correctly on 4.0.18.
Minimal reproduction
Error output
The
&v=<hash>suffix is appended to the literal resolved file path by the module evaluator, making it unresolvable on disk.When the package is instead added to
test.deps.optimizer.client.include, the pre-bundled chunk gets the same treatment:Expected behavior
importOriginal/vi.importActualshould resolve the module correctly regardless of whether it is listed inserver.deps.inlineoroptimizer.client.include, as it did in 4.0.x.Workaround
Pinning to
~4.0.0viaoverridesinpackage.jsonresolves the issue.