Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a518019

Browse files
hi-ogawadavidhwilliamsDavid Harriscodexsheremet-va
authored
fix: fix importOriginal with optimizer and query import [backport to v4] (#10546)
Co-authored-by: David Harris <[email protected]> Co-authored-by: David Harris <[email protected]> Co-authored-by: Hiroshi Ogawa <[email protected]> Co-authored-by: Codex <[email protected]> Co-authored-by: Vladimir <[email protected]>
1 parent 2c9559c commit a518019

11 files changed

Lines changed: 125 additions & 4 deletions

File tree

packages/vitest/src/runtime/moduleRunner/utils.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
// copied from vite/src/shared/utils.ts
1+
// copied from vite
2+
// https://github.com/vitejs/vite/blob/4417b4f305623b2850bd6ae6553834c017694672/packages/vite/src/shared/utils.ts
3+
// https://github.com/vitejs/vite/blob/4417b4f305623b2850bd6ae6553834c017694672/packages/vite/src/node/utils.ts
24
const postfixRE = /[?#].*$/
5+
const trailingSeparatorRE = /[?&]$/
36

47
function cleanUrl(url: string): string {
58
return url.replace(postfixRE, '')
@@ -16,6 +19,6 @@ export function injectQuery(url: string, queryToInject: string): string {
1619

1720
export function removeQuery(url: string, queryToRemove: string): string {
1821
return url
19-
.replace(new RegExp(`[?&]${queryToRemove}(?=[&#]|$)`), '')
20-
.replace(/\?$/, '')
22+
.replace(new RegExp(`([?&])${queryToRemove}(?:&|$)`), '$1')
23+
.replace(trailingSeparatorRE, '')
2124
}

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/cli/deps/dep-simple2/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'test-dep-simple2'
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "test-dep-simple2",
3+
"type": "module",
4+
"private": true,
5+
"exports": "./index.js"
6+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { expect, test, vi } from 'vitest'
2+
// @ts-expect-error no type
3+
import * as dep from "@test/test-dep-url"
4+
// @ts-expect-error no type
5+
import * as simple from "test-dep-simple"
6+
// @ts-expect-error no type
7+
import * as simple2 from "test-dep-simple2"
8+
9+
// mock + optimized
10+
vi.mock('@test/test-dep-url', async (importOriginal) => {
11+
const original = await importOriginal<any>()
12+
return { ...original, mocked: "ok" };
13+
})
14+
15+
// mock + not optimized + no external
16+
vi.mock('test-dep-simple', async (importOriginal) => {
17+
const original = await importOriginal<any>()
18+
return { ...original, mocked: "ok" };
19+
})
20+
21+
// mock + not optimized + external
22+
vi.mock('test-dep-simple2', async (importOriginal) => {
23+
const original = await importOriginal<any>()
24+
return { ...original, mocked: "ok" };
25+
})
26+
27+
test('basic', () => {
28+
expect.soft({...dep}).toEqual({
29+
mocked: 'ok',
30+
importMetaUrl: expect.stringContaining('/node_modules/.vite/vitest/')
31+
})
32+
expect({...simple}).toEqual({
33+
mocked: 'ok',
34+
default: 'test-dep-simple',
35+
})
36+
expect({...simple2}).toEqual({
37+
mocked: 'ok',
38+
default: 'test-dep-simple2',
39+
})
40+
})
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { defineConfig } from 'vitest/config'
2+
3+
export default defineConfig({
4+
ssr: {
5+
noExternal: ["test-dep-simple"],
6+
optimizeDeps: {
7+
include: ["@test/test-dep-url"],
8+
},
9+
},
10+
test: {
11+
deps: {
12+
optimizer: {
13+
ssr: {
14+
enabled: true,
15+
},
16+
},
17+
},
18+
},
19+
})

test/cli/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"playwright": "catalog:",
3232
"test-dep-invalid": "link:./deps/dep-invalid",
3333
"test-dep-simple": "file:./deps/dep-simple",
34+
"test-dep-simple2": "file:./deps/dep-simple2",
3435
"tinyspy": "catalog:",
3536
"typescript": "catalog:",
3637
"unplugin-swc": "^1.5.9",
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { expect, test } from 'vitest'
2+
import { runVitest } from '../../test-utils'
3+
4+
test.for(['forks', 'threads', 'vmThreads', 'vmForks'])(
5+
'optimize deps and mock - %s',
6+
async (pool) => {
7+
const { errorTree, stderr } = await runVitest({
8+
root: './fixtures/optimize-deps-mock',
9+
pool,
10+
})
11+
12+
expect(stderr).toBe('')
13+
expect(errorTree()).toMatchInlineSnapshot(`
14+
{
15+
"basic.test.ts": {
16+
"basic": "passed",
17+
},
18+
}
19+
`)
20+
},
21+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'import-actual-query-target'
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { expect, test, vi } from 'vitest'
2+
import * as target from './import-actual-query-target?raw'
3+
4+
vi.mock(import('./import-actual-query-target?raw'), async (importOriginal) => {
5+
const original = await importOriginal<any>()
6+
return {
7+
...original,
8+
mocked: 'ok',
9+
}
10+
})
11+
12+
test('importOriginal preserves query parameters', () => {
13+
expect({ ...target }).toMatchInlineSnapshot(`
14+
{
15+
"default": "export default 'import-actual-query-target'
16+
",
17+
"mocked": "ok",
18+
}
19+
`)
20+
})

0 commit comments

Comments
 (0)