Skip to content

Commit 2590f25

Browse files
codenemericallam
authored andcommitted
Use vitest fixtures
1 parent 86348ee commit 2590f25

File tree

2 files changed

+81
-91
lines changed

2 files changed

+81
-91
lines changed

packages/cli-v3/e2e/index.test.ts

Lines changed: 75 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,18 @@ interface TestCase {
2828
wantWorkerError?: boolean;
2929
wantDependenciesError?: boolean;
3030
wantInstallationError?: boolean;
31-
};
31+
}
32+
33+
interface E2EFixtureTest extends TestCase {
34+
dir: string;
35+
tempDir: string;
36+
packageManager: PackageManager;
37+
}
3238

3339
const TIMEOUT = 120_000;
3440

3541
const testCases: TestCase[] = process.env.MOD
36-
? allTestCases.filter(({ name }) => process.env.MOD === name)
42+
? allTestCases.filter(({ id }) => process.env.MOD === id)
3743
: allTestCases;
3844

3945
let options: E2EOptions;
@@ -53,39 +59,25 @@ logger.loggerLevel = options.logLevel;
5359

5460
if (testCases.length > 0) {
5561
describe.concurrent("bundling", async () => {
56-
beforeAll(async () => {
57-
for (let testCase of testCases) {
58-
const { name } = testCase;
59-
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
60-
await rm(resolve(join(fixtureDir, ".trigger")), { force: true, recursive: true });
61-
await rimraf(join(fixtureDir, "**/node_modules/**"), {
62-
glob: true,
63-
});
64-
const packageManager: PackageManager = await parsePackageManager(options, fixtureDir);
65-
66-
if (
67-
packageManager === "npm" &&
68-
(existsSync(resolve(join(fixtureDir, "yarn.lock"))) ||
69-
existsSync(resolve(join(fixtureDir, "yarn.lock.copy"))))
70-
) {
71-
// `npm ci` & `npm install` will update an existing yarn.lock
72-
try {
73-
await rename(
74-
resolve(join(fixtureDir, "yarn.lock")),
75-
resolve(join(fixtureDir, "yarn.lock.copy"))
76-
);
77-
} catch (e) {
78-
await rename(
79-
resolve(join(fixtureDir, "yarn.lock.copy")),
80-
resolve(join(fixtureDir, "yarn.lock"))
81-
);
82-
}
62+
beforeEach<E2EFixtureTest>(async ({ dir, packageManager }) => {
63+
await rimraf(join(dir, "**/node_modules/**"), {
64+
glob: true,
65+
});
66+
if (
67+
packageManager === "npm" &&
68+
(existsSync(resolve(join(dir, "yarn.lock"))) ||
69+
existsSync(resolve(join(dir, "yarn.lock.copy"))))
70+
) {
71+
// `npm ci` & `npm install` will update an existing yarn.lock
72+
try {
73+
await rename(resolve(join(dir, "yarn.lock")), resolve(join(dir, "yarn.lock.copy")));
74+
} catch (e) {
75+
await rename(resolve(join(dir, "yarn.lock.copy")), resolve(join(dir, "yarn.lock")));
8376
}
8477
}
8578
});
8679

87-
afterEach(() => {
88-
delete global.tempDir;
80+
afterEach<E2EFixtureTest>(async ({ dir, packageManager }) => {
8981
delete global.resolvedConfig;
9082

9183
delete global.entryPointMetaOutput;
@@ -94,50 +86,54 @@ if (testCases.length > 0) {
9486
delete global.workerOutputFile;
9587

9688
delete global.dependencies;
97-
});
9889

99-
afterAll(async () => {
100-
for (let testCase of testCases) {
101-
const { name } = testCase;
102-
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
103-
const packageManager: PackageManager = await parsePackageManager(options, fixtureDir);
104-
105-
if (packageManager === "npm") {
106-
try {
107-
await rename(
108-
resolve(join(fixtureDir, "yarn.lock.copy")),
109-
resolve(join(fixtureDir, "yarn.lock"))
110-
);
111-
} catch {}
112-
}
90+
if (packageManager === "npm") {
91+
try {
92+
await rename(resolve(join(dir, "yarn.lock.copy")), resolve(join(dir, "yarn.lock")));
93+
} catch {}
11394
}
11495
});
11596

11697
for (let testCase of testCases) {
117-
const {
118-
name,
119-
skipTypecheck,
120-
wantConfigNotFoundError,
121-
wantConfigInvalidError,
122-
wantCompilationError,
123-
wantWorkerError,
124-
wantDependenciesError,
125-
wantInstallationError,
126-
} = testCase;
127-
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
128-
let shouldSkipFixture: boolean = false;
129-
const packageManager: PackageManager = await parsePackageManager(options, fixtureDir);
130-
131-
if (options.packageManager)
132-
shouldSkipFixture = !existsSync(resolve(fixtureDir, LOCKFILES[options.packageManager]));
133-
134-
test.skipIf(shouldSkipFixture)(
135-
`fixture '${name}'`,
136-
async () => {
98+
test.extend<E2EFixtureTest>({
99+
...testCase,
100+
dir: async ({ id }, use) => await use(resolve(join(process.cwd(), "e2e/fixtures", id))),
101+
packageManager: async ({ dir }, use) => await use(await parsePackageManager(options, dir)),
102+
tempDir: async ({ dir }, use) => {
103+
const existingTempDir = resolve(join(dir, ".trigger"));
104+
105+
if (existsSync(existingTempDir)) {
106+
await rm(existingTempDir, { force: true, recursive: true });
107+
}
108+
await use((await mkdir(join(dir, ".trigger"), { recursive: true })) as string);
109+
},
110+
})(
111+
`fixture '${testCase.id}'`,
112+
{ timeout: TIMEOUT },
113+
async ({
114+
dir,
115+
packageManager,
116+
skip,
117+
skipTypecheck,
118+
tempDir,
119+
wantCompilationError,
120+
wantConfigInvalidError,
121+
wantConfigNotFoundError,
122+
wantDependenciesError,
123+
wantInstallationError,
124+
wantWorkerError,
125+
}) => {
126+
if (
127+
options.packageManager &&
128+
!existsSync(resolve(dir, LOCKFILES[options.packageManager]))
129+
) {
130+
skip();
131+
}
132+
137133
await expect(
138134
(async () => {
139135
if (["pnpm", "yarn"].includes(packageManager)) {
140-
const buffer = readFileSync(resolve(join(fixtureDir, "package.json")), "utf8");
136+
const buffer = readFileSync(resolve(join(dir, "package.json")), "utf8");
141137
const pkgJSON = JSON.parse(buffer.toString());
142138
const version = pkgJSON.engines[packageManager];
143139
console.log(
@@ -147,7 +143,7 @@ if (testCases.length > 0) {
147143
"corepack",
148144
["use", `${packageManager}@${version}`],
149145
{
150-
cwd: fixtureDir,
146+
cwd: dir,
151147
}
152148
);
153149
console.log(stdout);
@@ -157,8 +153,8 @@ if (testCases.length > 0) {
157153
packageManager,
158154
installArgs(packageManager),
159155
{
160-
cwd: fixtureDir,
161-
NODE_PATH: resolve(join(fixtureDir, "node_modules")),
156+
cwd: dir,
157+
NODE_PATH: resolve(join(dir, "node_modules")),
162158
}
163159
);
164160
console.log(stdout);
@@ -170,7 +166,7 @@ if (testCases.length > 0) {
170166

171167
const configExpect = expect(
172168
(async () => {
173-
global.resolvedConfig = await readConfig(fixtureDir, { cwd: fixtureDir });
169+
global.resolvedConfig = await readConfig(dir, { cwd: dir });
174170
})(),
175171
wantConfigNotFoundError || wantConfigInvalidError
176172
? "does not resolve config"
@@ -191,11 +187,6 @@ if (testCases.length > 0) {
191187

192188
expect(global.resolvedConfig).not.toBe("error");
193189

194-
global.tempDir = await mkdir(
195-
join((global.resolvedConfig as ReadConfigFileResult).config.projectDir, ".trigger"),
196-
{ recursive: true }
197-
);
198-
199190
if (!skipTypecheck) {
200191
await expect(
201192
(async () =>
@@ -213,7 +204,7 @@ if (testCases.length > 0) {
213204
entryPointOutputFile,
214205
} = await compile({
215206
resolvedConfig: global.resolvedConfig!,
216-
tempDir: global.tempDir!,
207+
tempDir,
217208
});
218209
global.entryPointMetaOutput = entryPointMetaOutput;
219210
global.entryPointOutputFile = entryPointOutputFile;
@@ -236,7 +227,7 @@ if (testCases.length > 0) {
236227
entryPointMetaOutput: global.entryPointMetaOutput!,
237228
metaOutput: global.workerMetaOutput!,
238229
resolvedConfig: global.resolvedConfig!,
239-
tempDir: global.tempDir!,
230+
tempDir,
240231
packageManager,
241232
});
242233
global.dependencies = dependencies;
@@ -255,7 +246,7 @@ if (testCases.length > 0) {
255246
(async () => {
256247
await createContainerFile({
257248
resolvedConfig: global.resolvedConfig!,
258-
tempDir: global.tempDir!,
249+
tempDir,
259250
});
260251
})(),
261252
"copies postinstall command into Containerfile.prod"
@@ -284,8 +275,8 @@ if (testCases.length > 0) {
284275
"--strict-peer-deps=false",
285276
],
286277
{
287-
cwd: global.tempDir!,
288-
NODE_PATH: resolve(join(global.tempDir!, "node_modules")),
278+
cwd: tempDir,
279+
NODE_PATH: resolve(join(tempDir, "node_modules")),
289280
}
290281
);
291282
console.log(stdout);
@@ -304,10 +295,10 @@ if (testCases.length > 0) {
304295
const workerStartExpect = expect(
305296
(async () => {
306297
const { stdout, stderr } = await execaNode("worker.js", {
307-
cwd: global.tempDir!,
298+
cwd: tempDir,
308299
env: {
309300
// Since we don't start the worker in a container, limit node resolution algorithm to the '.trigger/node_modules' folder
310-
NODE_PATH: resolve(join(global.tempDir!, "node_modules")),
301+
NODE_PATH: resolve(join(tempDir, "node_modules")),
311302
},
312303
});
313304
console.log(stdout);
@@ -322,8 +313,7 @@ if (testCases.length > 0) {
322313
}
323314

324315
await workerStartExpect.resolves.not.toThrowError();
325-
},
326-
{ timeout: TIMEOUT }
316+
}
327317
);
328318
}
329319
});

packages/cli-v3/e2e/testCases.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
[
22
{
3-
"name": "config-invalid",
3+
"id": "config-invalid",
44
"wantConfigInvalidError": true
55
},
66
{
7-
"name": "config-not-found",
7+
"id": "config-not-found",
88
"wantConfigNotFoundError": true
99
},
1010
{
11-
"name": "dep-to-add-scope-parsing",
11+
"id": "dep-to-add-scope-parsing",
1212
"skipTypecheck": true
1313
},
1414
{
15-
"name": "legacy-peer-deps",
15+
"id": "legacy-peer-deps",
1616
"skipTypecheck": true
1717
},
1818
{
19-
"name": "resolve-trigger-deps",
19+
"id": "resolve-trigger-deps",
2020
"skipTypecheck": true
2121
},
2222
{
23-
"name": "server-only",
23+
"id": "server-only",
2424
"skipTypecheck": true
2525
}
2626
]

0 commit comments

Comments
 (0)