Skip to content

Commit aaa9cca

Browse files
authored
Support Vitest 3 (#7923)
* Support Vitest 3 * no hangin timeout * more changes * faster tests? * turbo * update lockfile * fix lockfile * fix * lint & windows * fix lockfile * lockfile * fix lint * Support v2 as well * changeset * lockfile
1 parent 9f482ad commit aaa9cca

File tree

32 files changed

+1006
-714
lines changed

32 files changed

+1006
-714
lines changed

.changeset/hot-ravens-roll.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cloudflare/vitest-pool-workers": minor
3+
---
4+
5+
Support Vitest v3. While this drops testing for Vitest v2, we expect Vitest v2 will continue to work as well.

fixtures/additional-modules/test/index.test.ts

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,19 @@ import os from "node:os";
66
import path from "node:path";
77
import { setTimeout } from "node:timers/promises";
88
import { fetch } from "undici";
9-
import { afterAll, beforeAll, describe, expect, test } from "vitest";
10-
import {
11-
runWranglerDev,
12-
wranglerEntryPath,
13-
} from "../../shared/src/run-wrangler-long-lived";
9+
import { afterAll, beforeAll, describe, expect, test, vi } from "vitest";
10+
import { unstable_startWorker } from "wrangler";
11+
import { wranglerEntryPath } from "../../shared/src/run-wrangler-long-lived";
1412

1513
async function getTmpDir() {
1614
return fs.mkdtemp(path.join(os.tmpdir(), "wrangler-modules-"));
1715
}
1816

19-
type WranglerDev = Awaited<ReturnType<typeof runWranglerDev>>;
17+
type WranglerDev = Awaited<ReturnType<typeof unstable_startWorker>>;
2018
function get(worker: WranglerDev, pathname: string) {
21-
const url = `http://${worker.ip}:${worker.port}${pathname}`;
19+
const url = `http://example.com${pathname}`;
2220
// Disable Miniflare's pretty error page, so we can parse errors as JSON
23-
return fetch(url, { headers: { "MF-Disable-Pretty-Error": "true" } });
24-
}
25-
26-
async function retry<T>(closure: () => Promise<T>, max = 30): Promise<T> {
27-
for (let attempt = 1; attempt <= max; attempt++) {
28-
try {
29-
return await closure();
30-
} catch (e) {
31-
if (attempt === max) throw e;
32-
}
33-
await setTimeout(1_000);
34-
}
35-
assert.fail("Unreachable");
21+
return worker.fetch(url, { headers: { "MF-Disable-Pretty-Error": "true" } });
3622
}
3723

3824
describe("find_additional_modules dev", () => {
@@ -52,10 +38,12 @@ describe("find_additional_modules dev", () => {
5238
path.join(tmpDir, "wrangler.toml")
5339
);
5440

55-
worker = await runWranglerDev(tmpDir, ["--port=0", "--inspector-port=0"]);
41+
worker = await unstable_startWorker({
42+
config: path.join(tmpDir, "wrangler.toml"),
43+
});
5644
});
5745
afterAll(async () => {
58-
await worker.stop();
46+
await worker.dispose();
5947
try {
6048
await fs.rm(tmpDir, { recursive: true, force: true });
6149
} catch (e) {
@@ -102,28 +90,27 @@ describe("find_additional_modules dev", () => {
10290
path.join(srcDir, "dynamic.js"),
10391
'export default "new dynamic";'
10492
);
105-
await retry(async () => {
93+
await vi.waitFor(async () => {
10694
const res = await get(worker, "/dynamic");
10795
assert.strictEqual(await res.text(), "new dynamic");
10896
});
10997

11098
// Delete dynamically imported file
11199
await fs.rm(path.join(srcDir, "lang", "en.js"));
112-
const res = await retry(async () => {
113-
const res = await get(worker, "/lang/en");
114-
assert.strictEqual(res.status, 500);
115-
return res;
100+
101+
await vi.waitFor(async () => {
102+
await expect(get(worker, "/lang/en")).rejects.toThrowError(
103+
'No such module "lang/en.js".'
104+
);
116105
});
117-
const error = (await res.json()) as { message?: string };
118-
expect(error.message).toBe('No such module "lang/en.js".');
119106

120107
// Create new dynamically imported file in new directory
121108
await fs.mkdir(path.join(srcDir, "lang", "en"));
122109
await fs.writeFile(
123110
path.join(srcDir, "lang", "en", "us.js"),
124111
'export default { hello: "hey" };'
125112
);
126-
await retry(async () => {
113+
await vi.waitFor(async () => {
127114
const res = await get(worker, "/lang/en/us");
128115
assert.strictEqual(await res.text(), "hey");
129116
});
@@ -133,7 +120,7 @@ describe("find_additional_modules dev", () => {
133120
path.join(srcDir, "lang", "en", "us.js"),
134121
'export default { hello: "bye" };'
135122
);
136-
await retry(async () => {
123+
await vi.waitFor(async () => {
137124
const res = await get(worker, "/lang/en/us");
138125
assert.strictEqual(await res.text(), "bye");
139126
});

fixtures/asset-config/vitest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default defineWorkersConfig({
3333
server: {
3434
deps: {
3535
// Vitest automatically adds `/^(?!.*node_modules).*\.mjs$/` as an
36-
// `inline` RegExp: https://github.com/vitest-dev/vitest/blob/v2.1.1/packages/vitest/src/constants.ts#L9
36+
// `inline` RegExp: https://github.com/vitest-dev/vitest/blob/v3.0.5/packages/vitest/src/constants.ts#L9
3737
// We'd like `packages/vitest-pool-workers/dist/pool/index.mjs` to be
3838
// externalised though. Unfortunately, `inline`s are checked before
3939
// `external`s, so there's no nice way we can override this. Instead,

0 commit comments

Comments
 (0)