Files
bun.sh/test/cli/run/run-autoinstall.test.ts

87 lines
2.9 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { mkdirSync } from "fs";
import { bunEnv, bunExe, tmpdirSync } from "harness";
import { join } from "path";
// --install=<val> Configure auto-install behavior. One of "auto" (default, auto-installs when no node_modules), "fallback" (missing packages only), "force" (always).
// -i Auto-install dependencies during execution. Equivalent to --install=fallback.
describe("basic autoinstall", () => {
for (const install of ["", "-i", "--install=auto", "--install=fallback", "--install=force"]) {
for (const has_node_modules of [true, false]) {
let should_install = false;
if (has_node_modules) {
if (install === "" || install === "--install=auto") {
should_install = false;
} else {
should_install = true;
}
} else {
should_install = true;
}
test(`${install || "<no flag>"} ${has_node_modules ? "with" : "without"} node_modules ${should_install ? "should" : "should not"} autoinstall`, async () => {
const dir = tmpdirSync();
mkdirSync(dir, { recursive: true });
await Bun.write(join(dir, "index.js"), "import isEven from 'is-even'; console.log(isEven(2));");
const env = bunEnv;
env.BUN_INSTALL = install;
if (has_node_modules) {
mkdirSync(join(dir, "node_modules/abc"), { recursive: true });
}
const { stdout, stderr } = Bun.spawnSync({
cmd: [bunExe(), ...(install === "" ? [] : [install]), join(dir, "index.js")],
cwd: dir,
env,
stdout: "pipe",
stderr: "pipe",
});
if (should_install) {
expect(stderr?.toString("utf8")).not.toContain("error: Cannot find package 'is-even'");
expect(stdout?.toString("utf8")).toBe("true\n");
} else {
expect(stderr?.toString("utf8")).toContain("error: Cannot find package 'is-even'");
}
});
}
}
});
test("--install=fallback to install missing packages", async () => {
const dir = tmpdirSync();
mkdirSync(dir, { recursive: true });
await Promise.all([
Bun.write(
join(dir, "index.js"),
"import isEven from 'is-even'; import isOdd from 'is-odd'; console.log(isEven(2), isOdd(2));",
),
Bun.write(
join(dir, "package.json"),
JSON.stringify({
name: "test",
dependencies: {
"is-odd": "1.0.0",
},
}),
),
]);
Bun.spawnSync({
cmd: [bunExe(), "install"],
cwd: dir,
env: bunEnv,
});
const { stdout, stderr } = Bun.spawnSync({
cmd: [bunExe(), "--install=fallback", join(dir, "index.js")],
cwd: dir,
env: bunEnv,
stdout: "pipe",
stderr: "pipe",
});
expect(stderr?.toString("utf8")).not.toContain("error: Cannot find package 'is-odd'");
expect(stdout?.toString("utf8")).toBe("true false\n");
});