mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-04 07:10:24 +00:00
test: speed up cli and command suites
This commit is contained in:
@@ -1,34 +1,26 @@
|
||||
import readline from "node:readline/promises";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { isYes, setVerbose, setYes } from "../globals.js";
|
||||
import { promptYesNo } from "./prompt.js";
|
||||
|
||||
type ReadlineMock = {
|
||||
default: {
|
||||
createInterface: () => {
|
||||
question: ReturnType<typeof vi.fn>;
|
||||
close: ReturnType<typeof vi.fn>;
|
||||
};
|
||||
};
|
||||
};
|
||||
const readlineState = vi.hoisted(() => {
|
||||
const question = vi.fn(async () => "");
|
||||
const close = vi.fn();
|
||||
const createInterface = vi.fn(() => ({ question, close }));
|
||||
return { question, close, createInterface };
|
||||
});
|
||||
|
||||
type PromptModule = typeof import("./prompt.js");
|
||||
type GlobalsModule = typeof import("../globals.js");
|
||||
vi.mock("node:readline/promises", () => ({
|
||||
default: { createInterface: readlineState.createInterface },
|
||||
}));
|
||||
|
||||
let promptYesNo: PromptModule["promptYesNo"];
|
||||
let readline: ReadlineMock;
|
||||
let isYes: GlobalsModule["isYes"];
|
||||
let setVerbose: GlobalsModule["setVerbose"];
|
||||
let setYes: GlobalsModule["setYes"];
|
||||
|
||||
beforeEach(async () => {
|
||||
vi.resetModules();
|
||||
vi.doMock("node:readline/promises", () => {
|
||||
const question = vi.fn(async () => "");
|
||||
const close = vi.fn();
|
||||
const createInterface = vi.fn(() => ({ question, close }));
|
||||
return { default: { createInterface } };
|
||||
});
|
||||
({ promptYesNo } = await import("./prompt.js"));
|
||||
({ isYes, setVerbose, setYes } = await import("../globals.js"));
|
||||
readline = (await import("node:readline/promises")) as unknown as ReadlineMock;
|
||||
beforeEach(() => {
|
||||
setYes(false);
|
||||
setVerbose(false);
|
||||
readlineState.question.mockReset();
|
||||
readlineState.question.mockResolvedValue("");
|
||||
readlineState.close.mockClear();
|
||||
readlineState.createInterface.mockClear();
|
||||
});
|
||||
|
||||
describe("promptYesNo", () => {
|
||||
@@ -43,16 +35,16 @@ describe("promptYesNo", () => {
|
||||
it("asks the question and respects default", async () => {
|
||||
setYes(false);
|
||||
setVerbose(false);
|
||||
const { question: questionMock } = readline.default.createInterface();
|
||||
questionMock.mockResolvedValueOnce("");
|
||||
expect(readline).toBeTruthy();
|
||||
readlineState.question.mockResolvedValueOnce("");
|
||||
const resultDefaultYes = await promptYesNo("Continue?", true);
|
||||
expect(resultDefaultYes).toBe(true);
|
||||
|
||||
questionMock.mockResolvedValueOnce("n");
|
||||
readlineState.question.mockResolvedValueOnce("n");
|
||||
const resultNo = await promptYesNo("Continue?", true);
|
||||
expect(resultNo).toBe(false);
|
||||
|
||||
questionMock.mockResolvedValueOnce("y");
|
||||
readlineState.question.mockResolvedValueOnce("y");
|
||||
const resultYes = await promptYesNo("Continue?", false);
|
||||
expect(resultYes).toBe(true);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user