Spaces:
Configuration error
Configuration error
File size: 2,945 Bytes
3a65265 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
import { afterEach, describe, expect, it, vi } from "vitest";
const fsMocks = vi.hoisted(() => ({
access: vi.fn(),
}));
vi.mock("node:fs/promises", () => ({
default: { access: fsMocks.access },
access: fsMocks.access,
}));
import {
renderSystemNodeWarning,
resolvePreferredNodePath,
resolveSystemNodeInfo,
} from "./runtime-paths.js";
afterEach(() => {
vi.resetAllMocks();
});
describe("resolvePreferredNodePath", () => {
const darwinNode = "/opt/homebrew/bin/node";
it("uses system node when it meets the minimum version", async () => {
fsMocks.access.mockImplementation(async (target: string) => {
if (target === darwinNode) return;
throw new Error("missing");
});
const execFile = vi.fn().mockResolvedValue({ stdout: "22.1.0\n", stderr: "" });
const result = await resolvePreferredNodePath({
env: {},
runtime: "node",
platform: "darwin",
execFile,
});
expect(result).toBe(darwinNode);
expect(execFile).toHaveBeenCalledTimes(1);
});
it("skips system node when it is too old", async () => {
fsMocks.access.mockImplementation(async (target: string) => {
if (target === darwinNode) return;
throw new Error("missing");
});
const execFile = vi.fn().mockResolvedValue({ stdout: "18.19.0\n", stderr: "" });
const result = await resolvePreferredNodePath({
env: {},
runtime: "node",
platform: "darwin",
execFile,
});
expect(result).toBeUndefined();
expect(execFile).toHaveBeenCalledTimes(1);
});
it("returns undefined when no system node is found", async () => {
fsMocks.access.mockRejectedValue(new Error("missing"));
const execFile = vi.fn();
const result = await resolvePreferredNodePath({
env: {},
runtime: "node",
platform: "darwin",
execFile,
});
expect(result).toBeUndefined();
expect(execFile).not.toHaveBeenCalled();
});
});
describe("resolveSystemNodeInfo", () => {
const darwinNode = "/opt/homebrew/bin/node";
it("returns supported info when version is new enough", async () => {
fsMocks.access.mockImplementation(async (target: string) => {
if (target === darwinNode) return;
throw new Error("missing");
});
const execFile = vi.fn().mockResolvedValue({ stdout: "22.0.0\n", stderr: "" });
const result = await resolveSystemNodeInfo({
env: {},
platform: "darwin",
execFile,
});
expect(result).toEqual({
path: darwinNode,
version: "22.0.0",
supported: true,
});
});
it("renders a warning when system node is too old", () => {
const warning = renderSystemNodeWarning(
{
path: darwinNode,
version: "18.19.0",
supported: false,
},
"/Users/me/.fnm/node-22/bin/node",
);
expect(warning).toContain("below the required Node 22+");
expect(warning).toContain(darwinNode);
});
});
|