{"id":"49b82d5a3225ab55","repo":"vitest-dev/vitest","slug":"mock-id-wasn-t-resolved-this-is-probably-a-vit","errorCode":null,"errorMessage":"Mock ${id} wasn't resolved. This is probably a Vitest error. Please, open a new issue with reproduction.","messagePattern":"Mock (.+?) wasn't resolved\\. This is probably a Vitest error\\. Please, open a new issue with reproduction\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/mocker/src/browser/mocker.ts","lineNumber":46,"sourceCode":"    await Promise.all([...this.queue.values()])\n  }\n\n  public async resolveFactoryModule(id: string): Promise<Record<string | symbol, any>> {\n    const mock = this.registry.get(id)\n    if (!mock || mock.type !== 'manual') {\n      throw new Error(`Mock ${id} wasn't registered. This is probably a Vitest error. Please, open a new issue with reproduction.`)\n    }\n    const result = await mock.resolve()\n    return result\n  }\n\n  public getFactoryModule(id: string): any {\n    const mock = this.registry.get(id)\n    if (!mock || mock.type !== 'manual') {\n      throw new Error(`Mock ${id} wasn't registered. This is probably a Vitest error. Please, open a new issue with reproduction.`)\n    }\n    if (!mock.cache) {\n      throw new Error(`Mock ${id} wasn't resolved. This is probably a Vitest error. Please, open a new issue with reproduction.`)\n    }\n    return mock.cache\n  }\n\n  public async invalidate(): Promise<void> {\n    const ids = Array.from(this.mockedIds)\n    if (!ids.length) {\n      return\n    }\n    await this.rpc.invalidate(ids)\n    await this.interceptor.invalidate()\n    this.registry.clear()\n  }\n\n  public async importActual<T>(id: string, importer: string): Promise<T> {\n    const resolved = await this.rpc.resolveId(id, importer)\n    if (resolved == null) {\n      throw new Error(","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/mocker/src/browser/mocker.ts#L28-L64","documentation":"Thrown by getFactoryModule at packages/mocker/src/browser/mocker.ts:45-47 when a manual mock entry exists in the registry but its cache is falsy, meaning the module was registered but never resolved. Manual mocks must be resolved (via ManualMockedModule.resolve()) before their factory exports can be read.","triggerScenarios":"getFactoryModule(id) called before resolveFactoryModule(id) (which triggers resolve() and populates cache) was awaited for that id.","commonSituations":"Internal ordering where the read precedes the resolve; a failed resolve() that left cache unset; reset between resolve and read.","solutions":["Ensure resolveFactoryModule(id) is awaited before getFactoryModule(id).","Avoid clearing the registry between resolve and read.","Report with a reproduction as this is a Vitest-internal lifecycle error."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  vi.mock('./x', factory)\n} catch (e) {\n  if (e instanceof Error && /wasn't resolved/.test(e.message)) {\n    console.error('Vitest internal: manual mock registered but not resolved. Report with reproduction.')\n  }\n  throw e\n}","preventionTips":["Let Vitest resolve mocks via its normal lifecycle; do not short-circuit resolveFactoryModule.","Avoid resetting the mocker between resolve and read.","Align package versions."],"tags":["registry","internal","manual-mock","resolve"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}