diff --git a/packages/mocker/src/node/resolver.ts b/packages/mocker/src/node/resolver.ts index 888f404b01ac..834472b22ea0 100644 --- a/packages/mocker/src/node/resolver.ts +++ b/packages/mocker/src/node/resolver.ts @@ -103,7 +103,10 @@ export class ServerMockResolver { } private async resolveMockId(rawId: string, importer: string) { - if (!importer.startsWith(this.server.config.root)) { + if ( + !this.server.moduleGraph.getModuleById(importer) + && !importer.startsWith(this.server.config.root) + ) { importer = join(this.server.config.root, importer) } const resolved = await this.server.pluginContainer.resolveId( diff --git a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js index 3aed726e695d..d12dff4824e7 100644 --- a/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js +++ b/test/browser/fixtures/mocking-out-of-root/project1/basic.test.js @@ -1,5 +1,7 @@ import { test, expect, vi } from 'vitest'; import project2 from "../project2/index.js" +import "./imported-test.js" +import "../project3/imported-test.js" vi.mock("../project2/index.js", () => ({ default: 'project2-mocked' diff --git a/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js b/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js new file mode 100644 index 000000000000..7744dbdd443b --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project1/imported-test.js @@ -0,0 +1,8 @@ +import { vi, test, expect } from "vitest" +import lib from "./lib.js"; + +vi.mock("./lib.js", () => ({ default: "mocked" })) + +test("project1 imported", () => { + expect(lib).toBe("mocked"); +}) diff --git a/test/browser/fixtures/mocking-out-of-root/project1/lib.js b/test/browser/fixtures/mocking-out-of-root/project1/lib.js new file mode 100644 index 000000000000..6d9bb612b1bb --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project1/lib.js @@ -0,0 +1 @@ +export default "lib" diff --git a/test/browser/fixtures/mocking-out-of-root/project3/imported-test.js b/test/browser/fixtures/mocking-out-of-root/project3/imported-test.js new file mode 100644 index 000000000000..23c25e106347 --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project3/imported-test.js @@ -0,0 +1,8 @@ +import { vi, test, expect } from "vitest" +import lib from "./lib.js"; + +vi.mock("./lib.js", () => ({ default: "mocked" })) + +test("project3 imported", () => { + expect(lib).toBe("mocked"); +}) diff --git a/test/browser/fixtures/mocking-out-of-root/project3/lib.js b/test/browser/fixtures/mocking-out-of-root/project3/lib.js new file mode 100644 index 000000000000..6d9bb612b1bb --- /dev/null +++ b/test/browser/fixtures/mocking-out-of-root/project3/lib.js @@ -0,0 +1 @@ +export default "lib"