























@@ -331,6 +331,17 @@ async function flushTasks() {
331331await vi.dynamicImportSettled();
332332}
333333334+function getChatModelSelect(container: Element): HTMLSelectElement {
335+const select = container.querySelector<HTMLSelectElement>(
336+'select[data-chat-model-select="true"]',
337+);
338+expect(select).toBeInstanceOf(HTMLSelectElement);
339+if (!(select instanceof HTMLSelectElement)) {
340+throw new Error("Expected chat model select");
341+}
342+return select;
343+}
344+334345function renderChatView(overrides: Partial<Parameters<typeof renderChat>[0]> = {}) {
335346const container = document.createElement("div");
336347render(
@@ -485,7 +496,7 @@ describe("chat loading skeleton", () => {
485496});
486497487498expect(container.querySelector(".chat-loading-skeleton")).toBeNull();
488-expect(container.querySelector(".chat-reading-indicator")).not.toBeNull();
499+expect(container.querySelectorAll(".chat-reading-indicator")).toHaveLength(1);
489500});
490501});
491502@@ -936,14 +947,11 @@ describe("chat session controls", () => {
936947const container = document.createElement("div");
937948render(renderChatSessionSelect(state), container);
938949939-const modelSelect = container.querySelector<HTMLSelectElement>(
940-'select[data-chat-model-select="true"]',
941-);
942-expect(modelSelect).not.toBeNull();
943-expect(modelSelect?.value).toBe("");
950+const modelSelect = getChatModelSelect(container);
951+expect(modelSelect.value).toBe("");
944952945-modelSelect!.value = "openai/gpt-5-mini";
946-modelSelect!.dispatchEvent(new Event("change", { bubbles: true }));
953+modelSelect.value = "openai/gpt-5-mini";
954+modelSelect.dispatchEvent(new Event("change", { bubbles: true }));
947955948956expect(request).toHaveBeenCalledWith("sessions.patch", {
949957key: "main",
@@ -966,14 +974,11 @@ describe("chat session controls", () => {
966974const container = document.createElement("div");
967975render(renderChatSessionSelect(state), container);
968976969-const modelSelect = container.querySelector<HTMLSelectElement>(
970-'select[data-chat-model-select="true"]',
971-);
972-expect(modelSelect).not.toBeNull();
973-expect(modelSelect?.value).toBe("openai/gpt-5-mini");
977+const modelSelect = getChatModelSelect(container);
978+expect(modelSelect.value).toBe("openai/gpt-5-mini");
974979975-modelSelect!.value = "";
976-modelSelect!.dispatchEvent(new Event("change", { bubbles: true }));
980+modelSelect.value = "";
981+modelSelect.dispatchEvent(new Event("change", { bubbles: true }));
977982978983expect(request).toHaveBeenCalledWith("sessions.patch", {
979984key: "main",
@@ -991,32 +996,24 @@ describe("chat session controls", () => {
991996const container = document.createElement("div");
992997render(renderChatSessionSelect(state), container);
993998994-const modelSelect = container.querySelector<HTMLSelectElement>(
995-'select[data-chat-model-select="true"]',
996-);
997-expect(modelSelect).not.toBeNull();
998-expect(modelSelect?.disabled).toBe(true);
999+const modelSelect = getChatModelSelect(container);
1000+expect(modelSelect.disabled).toBe(true);
9991001});
1000100210011003it("keeps the selected model visible when the active session is absent from sessions.list", async () => {
10021004const { state } = createChatHeaderState({ omitSessionFromList: true });
10031005const container = document.createElement("div");
10041006render(renderChatSessionSelect(state), container);
100510071006-const modelSelect = container.querySelector<HTMLSelectElement>(
1007-'select[data-chat-model-select="true"]',
1008-);
1009-expect(modelSelect).not.toBeNull();
1008+const modelSelect = getChatModelSelect(container);
101010091011-modelSelect!.value = "openai/gpt-5-mini";
1012-modelSelect!.dispatchEvent(new Event("change", { bubbles: true }));
1010+modelSelect.value = "openai/gpt-5-mini";
1011+modelSelect.dispatchEvent(new Event("change", { bubbles: true }));
10131012await flushTasks();
10141013render(renderChatSessionSelect(state), container);
101510141016-const rerendered = container.querySelector<HTMLSelectElement>(
1017-'select[data-chat-model-select="true"]',
1018-);
1019-expect(rerendered?.value).toBe("openai/gpt-5-mini");
1015+const rerendered = getChatModelSelect(container);
1016+expect(rerendered.value).toBe("openai/gpt-5-mini");
10201017});
1021101810221019it("uses default thinking options when the active session is absent", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。