Common Errors
Cannot find module './relative-path'
If you receive an error that module cannot be found, it might mean several different things:
- You misspelled the path. Make sure the path is correct.
- It's possible that you rely on
baseUrl
in yourtsconfig.json
. Vite doesn't take into accounttsconfig.json
by default, so you might need to installvite-tsconfig-paths
yourself, if you rely on this behaviour.
- It's possible that you rely on
import { defineConfig } from 'vitest/config'
import tsconfigPaths from 'vite-tsconfig-paths'
export default defineConfig({
plugins: [tsconfigPaths()]
})
Or rewrite your path to not be relative to root:
- import helpers from 'src/helpers'
+ import helpers from '../src/helpers'
- Make sure you don't have relative aliases. Vite treats them as relative to the file where the import is instead of the root.
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
alias: {
'@/': './src/',
'@/': new URL('./src/', import.meta.url).pathname,
}
}
})
Cannot mock "./mocked-file.js" because it is already loaded
This error happens when vi.mock
method is called on a module that was already loaded. Vitest throws this error because this call has no effect since cached modules are preferred.
Remember that vi.mock
is always hoisted - it means that the module was loaded before the test file started executing - most likely in a setup file. To fix the error, remove the import or clear the cache at the end of a setup file - beware that setup file and your test file will reference different modules in that case.
// setupFile.js
import { vi } from 'vitest'
import { sideEffect } from './mocked-file.js'
sideEffect()
vi.resetModules()
Failed to terminate worker
This error can happen when NodeJS's fetch
is used with default pool: 'threads'
. This issue is tracked on issue Timeout abort can leave process(es) running in the background #3077.
As work-around you can switch to pool: 'forks'
or pool: 'vmForks'
.
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
pool: 'forks',
},
})
vitest --pool=forks
Segfaults and native code errors
Running native NodeJS modules in pool: 'threads'
can run into cryptic errors coming from the native code.
Segmentation fault (core dumped)
thread '<unnamed>' panicked at 'assertion failed
Abort trap: 6
internal error: entered unreachable code
In these cases the native module is likely not built to be multi-thread safe. As work-around, you can switch to pool: 'forks'
which runs the test cases in multiple node:child_process
instead of multiple node:worker_threads
.
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
pool: 'forks',
},
})
vitest --pool=forks