···11+# @vitest/addon-web-worker
22+33+> Web Worker support for Vitest testing. Doesn't require JSDom.
44+55+Simulates Web Worker, but in the same thread. Supports both `new Worker(url)` and `import from './worker?worker`.
66+77+## Installing
88+99+```sh
1010+# with npm
1111+npm install -D @vitest/addon-web-worker
1212+1313+# with pnpm
1414+pnpm install -D @vitest/addon-web-worker
1515+1616+# with yarn
1717+yarn install -D @vitest/addon-web-worker
1818+```
1919+2020+## Usage
2121+2222+Just import `@vitest/addon-web-worker` in your test file to test only in current suite.
2323+2424+Or add `@vitest/addon-web-worker` in your `setupFiles`, if you want to have a global support.
2525+2626+```ts
2727+import { defineConfig } from 'vitest/node'
2828+2929+export default defineConfig({
3030+ test: {
3131+ setupFiles: ['@vitest/addon-web-worker'],
3232+ },
3333+})
3434+```
3535+3636+## Examples
3737+3838+```ts
3939+// worker.ts
4040+import '@vitest/addon-web-worker'
4141+import MyWorker from '../worker?worker'
4242+4343+self.onmessage = (e) => {
4444+ self.postMessage(`${e.data} world`)
4545+}
4646+4747+// worker.test.ts
4848+let worker = new MyWorker()
4949+// new Worker is also supported
5050+worker = new Worker(new URL('../src/worker.ts', import.meta.url))
5151+5252+worker.postMessage('hello')
5353+worker.onmessage = (e) => {
5454+ // e.data equals to 'hello world'
5555+}
5656+```
5757+5858+## Notice
5959+6060+- Does not support `onmessage = () => {}`. Please, use `self.onmessage = () => {}`.
···11import type { MessagePort } from 'worker_threads'
22import type { FetchFunction, ModuleCache, RawSourceMap, ViteNodeResolveId } from 'vite-node'
33import type { BirpcReturn } from 'birpc'
44+import type { SuiteMocks } from './mocker'
45import type { ResolvedConfig } from './config'
56import type { File, TaskResultPack, Test } from './tasks'
67import type { SnapshotResult } from './snapshot'
···3738 current?: Test
3839 filepath?: string
3940 moduleCache: Map<string, ModuleCache>
4141+ mockMap: SuiteMocks
4042}
+6
packages/vitest/src/utils/global.ts
···11+import type { WorkerGlobalState } from '../types'
22+33+export function getWorkerState(): WorkerGlobalState {
44+ // @ts-expect-error untyped global
55+ return globalThis.__vitest_worker__
66+}
+1
packages/vitest/src/utils/index.ts
···77export * from './tasks'
88export * from './path'
99export * from './base'
1010+export * from './global'
10111112export const isWindows = process.platform === 'win32'
1213