Skip to content

Commit 93a3629

Browse files
committed
test(e2e): add vite static-path coverage and align output checks
1 parent 7d4b4f2 commit 93a3629

19 files changed

Lines changed: 564 additions & 2 deletions

e2e/adapters-e2e/public/robots.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
User-agent: *
2+
Allow: /
Lines changed: 3 additions & 0 deletions
Loading

e2e/adapters-e2e/src/components/click-me/click-me.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { component$, useSignal } from '@qwik.dev/core';
2+
import circleSvg from './assets/circle.svg?url';
23

34
// We need to extract the component to see the bug on 1.5.7
45
export default component$(() => {
56
const isOpenSig = useSignal(false);
67
return (
78
<>
9+
<img src={circleSvg} />
810
<button
911
onClick$={() => {
1012
return (isOpenSig.value = !isOpenSig.value);

e2e/adapters-e2e/vite.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ errorOnDuplicatesPkgDeps(devDependencies, dependencies);
2323
export default defineConfig((): UserConfig => {
2424
return {
2525
plugins: [qwikRouter(), qwikVite(), tsconfigPaths({ root: '.' })],
26+
build: {
27+
assetsInlineLimit: 0,
28+
},
2629
// This tells Vite which dependencies to pre-build in dev mode.
2730
optimizeDeps: {
2831
// Put problematic deps that break bundling here, mostly those with binaries.

e2e/vite-e2e/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
output/
2+
.work/

e2e/vite-e2e/build-variant.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { execFile } from 'node:child_process';
2+
import { cp, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3+
import { join } from 'node:path';
4+
import { promisify } from 'node:util';
5+
import {
6+
appTemplateDir,
7+
findVariantBySlug,
8+
outputRootDir,
9+
toClientConfigPath,
10+
toServerConfigPath,
11+
workspaceRootDir,
12+
} from './variants.ts';
13+
14+
const execFileAsync = promisify(execFile);
15+
16+
async function runBuildWithConfig(configPath: string, appDir: string) {
17+
await execFileAsync('pnpm', ['vite', 'build', '-c', configPath], {
18+
cwd: appDir,
19+
env: process.env,
20+
});
21+
}
22+
23+
async function persistBuildOutput(appDir: string, variantDir: string) {
24+
await rm(variantDir, { recursive: true, force: true });
25+
await mkdir(variantDir, { recursive: true });
26+
await cp(join(appDir, 'dist'), join(variantDir, 'dist'), { recursive: true });
27+
await cp(join(appDir, 'server'), join(variantDir, 'server'), { recursive: true });
28+
}
29+
30+
async function buildVariantBySlug(slug: string) {
31+
const variant = findVariantBySlug(slug);
32+
if (!variant) {
33+
throw new Error(`Unknown variant slug: ${slug}`);
34+
}
35+
36+
await mkdir(outputRootDir, { recursive: true });
37+
await mkdir(workspaceRootDir, { recursive: true });
38+
39+
const variantDir = join(outputRootDir, variant.slug);
40+
const workspaceDir = await mkdtemp(join(workspaceRootDir, `${variant.slug}-`));
41+
const appDir = join(workspaceDir, 'app');
42+
43+
try {
44+
await cp(appTemplateDir, appDir, {
45+
recursive: true,
46+
filter: (src) => {
47+
const ignored = ['node_modules', 'dist', 'server', '.vite-e2e'];
48+
return !ignored.some((name) => src.includes(`/${name}`));
49+
},
50+
});
51+
52+
// Keep each workspace scoped uniquely so Qwik's tmp manifest path doesn't conflict in parallel.
53+
const packageJsonPath = join(appDir, 'package.json');
54+
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8'));
55+
packageJson.name = `qwik-vite-e2e-${variant.slug}`;
56+
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
57+
58+
await runBuildWithConfig(toClientConfigPath(variant), appDir);
59+
await runBuildWithConfig(toServerConfigPath(variant), appDir);
60+
await persistBuildOutput(appDir, variantDir);
61+
} finally {
62+
await rm(workspaceDir, { recursive: true, force: true });
63+
await rm(workspaceRootDir, { recursive: true, force: true });
64+
}
65+
}
66+
67+
const slug = process.argv[2];
68+
if (!slug) {
69+
throw new Error('Missing variant slug argument');
70+
}
71+
72+
await buildVariantBySlug(slug);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { defineConfig, mergeConfig } from 'vite';
2+
import baseConfig from '../../../adapters-e2e/vite.config';
3+
4+
export default defineConfig(async (env) => {
5+
const resolvedBase = typeof baseConfig === 'function' ? await baseConfig(env) : baseConfig;
6+
7+
return mergeConfig(resolvedBase, {
8+
build: {
9+
assetsDir: 'assets-dir',
10+
},
11+
});
12+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { defineConfig, mergeConfig } from 'vite';
2+
import baseConfig from '../../../adapters-e2e/vite.config';
3+
4+
export default defineConfig(async (env) => {
5+
const resolvedBase = typeof baseConfig === 'function' ? await baseConfig(env) : baseConfig;
6+
7+
return mergeConfig(resolvedBase, {
8+
base: '/base/',
9+
build: {
10+
assetsDir: 'assets-dir',
11+
},
12+
});
13+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { defineConfig, mergeConfig } from 'vite';
2+
import baseConfig from '../../../adapters-e2e/vite.config';
3+
4+
export default defineConfig(async (env) => {
5+
const resolvedBase = typeof baseConfig === 'function' ? await baseConfig(env) : baseConfig;
6+
7+
return mergeConfig(resolvedBase, {
8+
base: '/base/',
9+
});
10+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import baseConfig from '../../../adapters-e2e/vite.config';
2+
3+
export default baseConfig;

0 commit comments

Comments
 (0)