Skip to content

Commit dd8ebf1

Browse files
Sync from the Ink Studio AI repository (da88bcd)
1 parent 37e064c commit dd8ebf1

3 files changed

Lines changed: 11 additions & 14 deletions

File tree

‎test/cli.test.mjs‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ import { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, w
33
import { tmpdir } from "node:os";
44
import { join } from "node:path";
55
import { Readable } from "node:stream";
6-
import { after, afterEach, before, beforeEach, describe, test } from "node:test";
6+
import { after, afterEach, beforeEach, describe, test } from "node:test";
77
import { main } from "../src/cli.js";
88
import { IMAGE_BYTES, OTHER_KEY, PRICING, VALID_KEY, startMockServer } from "./mock-server.mjs";
99

10-
/** @type {Awaited<ReturnType<typeof startMockServer>>} */
11-
let api;
10+
// Top-level await, not before(): Node 18 can run a top-level before() hook
11+
// after the beforeEach() hooks of a describe() suite.
12+
const api = await startMockServer();
1213
let home = "";
1314

14-
before(async () => {
15-
api = await startMockServer();
16-
});
1715
after(() => api.close());
1816
beforeEach(() => {
1917
home = mkdtempSync(join(tmpdir(), "inkstudioai-cli-"));

‎test/mcp.test.mjs‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,16 @@ import { chmodSync, mkdtempSync, readFileSync, rmSync, statSync } from "node:fs"
44
import { tmpdir } from "node:os";
55
import { join } from "node:path";
66
import { createInterface } from "node:readline";
7-
import { after, before, test } from "node:test";
7+
import { after, test } from "node:test";
88
import { fileURLToPath } from "node:url";
99
import { IMAGE_BYTES, VALID_KEY, startMockServer } from "./mock-server.mjs";
1010

1111
const BIN = fileURLToPath(new URL("../bin/inkstudioai.js", import.meta.url));
1212

13-
/** @type {Awaited<ReturnType<typeof startMockServer>>} */
14-
let api;
15-
let home = "";
13+
// Top-level await, not before(): see the note in cli.test.mjs.
14+
const api = await startMockServer();
15+
const home = mkdtempSync(join(tmpdir(), "inkstudioai-mcp-"));
1616

17-
before(async () => {
18-
api = await startMockServer();
19-
home = mkdtempSync(join(tmpdir(), "inkstudioai-mcp-"));
20-
});
2117
after(async () => {
2218
await api.close();
2319
rmSync(home, { recursive: true, force: true });

‎test/mock-server.mjs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,9 @@ export async function startMockServer() {
226226
});
227227

228228
await new Promise((done) => server.listen(0, "127.0.0.1", () => done(undefined)));
229+
// Node 18 runs top-level after() hooks only once the event loop is empty, so
230+
// a listening server would keep the test process alive forever.
231+
server.unref();
229232
const address = /** @type {import("node:net").AddressInfo} */ (server.address());
230233
origin = `http://127.0.0.1:${address.port}`;
231234
return {

0 commit comments

Comments
 (0)