




























@@ -412,10 +412,7 @@ describe("control UI routing", () => {
412412expect(toggle.getAttribute("aria-label")).toEqual(expect.stringMatching(/\S/u));
413413414414const nav = app.querySelector<HTMLElement>(".shell-nav");
415-expect(nav).not.toBeNull();
416-if (!nav) {
417-return;
418-}
415+expect(nav).toBeInstanceOf(HTMLElement);
419416420417expect(shell.classList.contains("shell--nav-drawer-open")).toBe(false);
421418toggle.click();
@@ -560,34 +557,32 @@ describe("control UI routing", () => {
560557const app = mountApp("/chat");
561558await app.updateComplete;
562559563-const initialContainer: HTMLElement | null = app.querySelector(".chat-thread");
564-expect(initialContainer).not.toBeNull();
565-if (!initialContainer) {
566-return;
567-}
568-initialContainer.style.maxHeight = "180px";
569-initialContainer.style.overflow = "auto";
560+const initialContainer = app.querySelector<HTMLElement>(".chat-thread");
561+expect(initialContainer).toBeInstanceOf(HTMLElement);
562+const initialThread = initialContainer!;
563+initialThread.style.maxHeight = "180px";
564+initialThread.style.overflow = "auto";
570565let scrollTop = 0;
571-Object.defineProperty(initialContainer, "clientHeight", {
566+Object.defineProperty(initialThread, "clientHeight", {
572567configurable: true,
573568get: () => 180,
574569});
575-Object.defineProperty(initialContainer, "scrollHeight", {
570+Object.defineProperty(initialThread, "scrollHeight", {
576571configurable: true,
577572get: () => 2400,
578573});
579-Object.defineProperty(initialContainer, "scrollTop", {
574+Object.defineProperty(initialThread, "scrollTop", {
580575configurable: true,
581576get: () => scrollTop,
582577set: (value: number) => {
583578scrollTop = value;
584579},
585580});
586-initialContainer.scrollTo = ((options?: ScrollToOptions | number, y?: number) => {
581+initialThread.scrollTo = ((options?: ScrollToOptions | number, y?: number) => {
587582const top =
588583typeof options === "number" ? (y ?? 0) : typeof options?.top === "number" ? options.top : 0;
589584scrollTop = Math.max(0, Math.min(top, 2400 - 180));
590-}) as typeof initialContainer.scrollTo;
585+}) as typeof initialThread.scrollTo;
591586592587app.chatMessages = Array.from({ length: 3 }, (_, index) => ({
593588role: "assistant",
@@ -600,35 +595,33 @@ describe("control UI routing", () => {
600595await nextFrame();
601596}
602597603-const container = app.querySelector(".chat-thread");
604-expect(container).not.toBeNull();
605-if (!container) {
606-return;
607-}
598+const container = app.querySelector<HTMLElement>(".chat-thread");
599+expect(container).toBeInstanceOf(HTMLElement);
600+const thread = container!;
608601let finalScrollTop = 0;
609-Object.defineProperty(container, "clientHeight", {
602+Object.defineProperty(thread, "clientHeight", {
610603value: 180,
611604configurable: true,
612605});
613-Object.defineProperty(container, "scrollHeight", {
606+Object.defineProperty(thread, "scrollHeight", {
614607value: 960,
615608configurable: true,
616609});
617-Object.defineProperty(container, "scrollTop", {
610+Object.defineProperty(thread, "scrollTop", {
618611configurable: true,
619612get: () => finalScrollTop,
620613set: (value: number) => {
621614finalScrollTop = value;
622615},
623616});
624-Object.defineProperty(container, "scrollTo", {
617+Object.defineProperty(thread, "scrollTo", {
625618configurable: true,
626619value: ({ top }: { top: number }) => {
627620finalScrollTop = top;
628621},
629622});
630-const targetScrollTop = container.scrollHeight;
631-expect(targetScrollTop).toBeGreaterThan(container.clientHeight);
623+const targetScrollTop = thread.scrollHeight;
624+expect(targetScrollTop).toBeGreaterThan(thread.clientHeight);
632625app.chatMessages = [
633626 ...app.chatMessages,
634627{
@@ -639,12 +632,12 @@ describe("control UI routing", () => {
639632];
640633await app.updateComplete;
641634for (let i = 0; i < 10; i++) {
642-if (container.scrollTop === targetScrollTop) {
635+if (thread.scrollTop === targetScrollTop) {
643636break;
644637}
645638await nextFrame();
646639}
647-expect(container.scrollTop).toBe(targetScrollTop);
640+expect(thread.scrollTop).toBe(targetScrollTop);
648641});
649642650643it("hydrates hash tokens, restores same-tab refreshes, and clears after gateway changes", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。