Skip to content

Commit cfe2965

Browse files
committed
test with devtools-json
1 parent fe61de7 commit cfe2965

File tree

3 files changed

+57
-25
lines changed

3 files changed

+57
-25
lines changed

packages/addons/_tests/_setup/suite.ts

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,41 @@ const variants = vitest.inject('variants');
1818

1919
type Fixtures<Addons extends AddonMap> = {
2020
page: Page;
21-
run(variant: ProjectVariant, options: OptionMap<Addons>): Promise<string>;
21+
run(variant: ProjectVariant, options: OptionMap<Addons>): Promise<void>;
22+
cwdVariant: (variant: ProjectVariant) => string;
23+
};
24+
25+
const installAddonHelper = async <Addons extends AddonMap>(
26+
cwdToUse: string,
27+
addons: Addons,
28+
variant: ProjectVariant,
29+
options: OptionMap<Addons>
30+
) => {
31+
const metaPath = path.resolve(cwdToUse, 'meta.json');
32+
fs.writeFileSync(metaPath, JSON.stringify({ variant, options }, null, '\t'), 'utf8');
33+
34+
// run addon
35+
const { pnpmBuildDependencies } = await installAddon({
36+
cwd: cwdToUse,
37+
addons,
38+
options,
39+
packageManager: 'pnpm'
40+
});
41+
42+
addPnpmBuildDependencies(cwdToUse, 'pnpm', ['esbuild', ...pnpmBuildDependencies]);
2243
};
2344

2445
export function setupTest<Addons extends AddonMap>(
2546
addons: Addons,
26-
options?: { skipBrowser?: boolean }
47+
options?: { skipBrowser?: boolean; runPrepareAndInstallWithOption?: OptionMap<Addons> }
2748
) {
2849
const test = vitest.test.extend<Fixtures<Addons>>({} as any);
2950

3051
const withBrowser = !options?.skipBrowser;
3152

3253
let create: CreateProject;
3354
let browser: Browser;
55+
let cwdTestName: string;
3456

3557
if (withBrowser) {
3658
vitest.beforeAll(async () => {
@@ -41,8 +63,11 @@ export function setupTest<Addons extends AddonMap>(
4163
});
4264
}
4365

44-
vitest.beforeAll(({ name }) => {
66+
vitest.beforeAll(async ({ name }) => {
4567
const testName = path.dirname(name).split('/').at(-1)!;
68+
cwdTestName = path.resolve(cwd, testName);
69+
70+
fs.rmSync(cwdTestName, { force: true, recursive: true });
4671

4772
// constructs a builder for create test projects
4873
create = createProject({ cwd, templatesDir, testName });
@@ -62,6 +87,18 @@ export function setupTest<Addons extends AddonMap>(
6287
private: true
6388
})
6489
);
90+
91+
// run prepare and install steps if requested
92+
if (options?.runPrepareAndInstallWithOption) {
93+
// prepare: run addon for all variants
94+
for (const variant of variants) {
95+
const cwd = create({ testId: variant, variant });
96+
await installAddonHelper(cwd, addons, variant, options.runPrepareAndInstallWithOption);
97+
}
98+
99+
// install: run pnpm install
100+
execSync('pnpm install --no-frozen-lockfile', { cwd: cwdTestName, stdio: 'pipe' });
101+
}
65102
});
66103

67104
// runs before each test case
@@ -71,23 +108,12 @@ export function setupTest<Addons extends AddonMap>(
71108
browserCtx = await browser.newContext();
72109
ctx.page = await browserCtx.newPage();
73110
}
74-
ctx.run = async (variant, options) => {
75-
const cwd = create({ testId: ctx.task.id, variant });
76-
77-
// test metadata
78-
const metaPath = path.resolve(cwd, 'meta.json');
79-
fs.writeFileSync(metaPath, JSON.stringify({ variant, options }, null, '\t'), 'utf8');
80-
81-
// run addon
82-
const { pnpmBuildDependencies } = await installAddon({
83-
cwd,
84-
addons,
85-
options,
86-
packageManager: 'pnpm'
87-
});
88-
addPnpmBuildDependencies(cwd, 'pnpm', ['esbuild', ...pnpmBuildDependencies]);
89-
90-
return cwd;
111+
ctx.cwdVariant = (variant) => {
112+
return path.resolve(cwdTestName, variant);
113+
};
114+
ctx.run = async (variant, runOptions) => {
115+
const cwd = create({ testId: variant, variant });
116+
await installAddonHelper(cwd, addons, variant, runOptions);
91117
};
92118

93119
return async () => {

packages/addons/_tests/devtools-json/test.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@ import devtoolsJson from '../../devtools-json/index.ts';
44
import fs from 'node:fs';
55
import path from 'node:path';
66

7-
const { test, variants, prepareServer } = setupTest({ devtoolsJson }, { skipBrowser: true });
7+
const { test, variants, prepareServer } = setupTest(
8+
{ devtoolsJson },
9+
{
10+
skipBrowser: true,
11+
runPrepareAndInstallWithOption: { devtoolsJson: {} }
12+
}
13+
);
814

915
test.concurrent.for(variants)('default - %s', async (variant, { page, ...ctx }) => {
10-
const cwd = await ctx.run(variant, { devtoolsJson: {} });
16+
const cwd = ctx.cwdVariant(variant);
1117

12-
const { close } = await prepareServer({ cwd, page });
18+
const { close } = await prepareServer({ cwd, page, installCommand: null! });
1319
// kill server process when we're done
1420
ctx.onTestFinished(async () => await close());
1521

packages/cli/lib/testing.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ export function createProject({ cwd, testName, templatesDir }: CreateOptions): C
7070
// create the reference dir
7171
const testDir = path.resolve(cwd, testName);
7272
fs.mkdirSync(testDir, { recursive: true });
73-
return ({ testId, variant, clean = true }) => {
74-
const targetDir = path.resolve(testDir, testId);
73+
return ({ variant, clean = true }) => {
74+
const targetDir = path.resolve(testDir, variant);
7575
if (clean && fs.existsSync(targetDir)) {
7676
fs.rmSync(targetDir, { force: true, recursive: true });
7777
}

0 commit comments

Comments
 (0)