test/scripts/test-environment.test.ts
Rama main · réplica de lectura del repositorio original.
import { expect } from "@std/expect";
import { describe, it as test } from "@std/testing/bdd";
import { withEnvironment } from "#scripts/test-environment.ts";
/** Names nothing else in the suite reads or writes. `Deno.env` belongs to the
* whole process, and test files run side by side in it, so borrowing a real
* setting's name here would let this test and a neighbour clobber each other. */
const EMPTY = "TICKETS_TEST_ENVIRONMENT_EMPTY";
const MISSING = "TICKETS_TEST_ENVIRONMENT_MISSING";
describe("temporary environment", () => {
test("restores empty and missing values exactly", async () => {
Deno.env.set(EMPTY, "");
Deno.env.delete(MISSING);
try {
await expect(
withEnvironment({ [EMPTY]: "localhost", [MISSING]: "43210" }, () => {
expect(Deno.env.get(EMPTY)).toBe("localhost");
expect(Deno.env.get(MISSING)).toBe("43210");
throw new Error("Task failed");
}),
).rejects.toThrow("Task failed");
expect(Deno.env.get(EMPTY)).toBe("");
expect(Deno.env.get(MISSING)).toBeUndefined();
} finally {
Deno.env.delete(EMPTY);
Deno.env.delete(MISSING);
}
});
test("returns the task result before restoring existing values", async () => {
Deno.env.set(EMPTY, "before");
try {
const result = await withEnvironment({ [EMPTY]: "during" }, () =>
Promise.resolve(Deno.env.get(EMPTY)),
);
expect(result).toBe("during");
expect(Deno.env.get(EMPTY)).toBe("before");
} finally {
Deno.env.delete(EMPTY);
}
});
});