修复Direct活动回合重试类型错误
Project CI / AI game creator shell Rust shard 4/4 (push) Successful in 6m53s
Project CI / AI game creator shell Rust shard 2/4 (push) Successful in 7m5s
Project CI / AI game creator shell Rust shard 3/4 (push) Successful in 7m26s
Project CI / AI game creator shell Rust shard 1/4 (push) Successful in 7m51s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m49s
Project CI / AI game creator shell Rust crates (push) Successful in 2m23s
Project CI / Frontend tests (push) Failing after 4m42s
Project CI / Repository checks (push) Successful in 4m44s
Project CI / Backend tests (push) Successful in 9m27s
Project CI / Native shell tests (push) Successful in 9m17s
Project CI / AI game creator shell web tests (push) Failing after 5m2s

重试等待 Promise 显式声明为 void,修复 shell typecheck 与原生构建失败。

补充卸载后取消读取重试的回归测试。
This commit was merged in pull request #391.
This commit is contained in:
2026-09-16 13:24:14 +00:00
committed by 孔令弘
parent 362edcc49d
commit 79b153e3fa
2 changed files with 39 additions and 2 deletions
@@ -78,7 +78,7 @@ export function useDirectActiveTurns({
return;
} catch {
if (attempt < DIRECT_ACTIVE_TURNS_READ_ATTEMPTS) {
await new Promise((resolve) => {
await new Promise<void>((resolve) => {
retryTimerRef.current = window.setTimeout(() => {
retryTimerRef.current = null;
resolve();
@@ -1,12 +1,49 @@
// @vitest-environment jsdom
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import {
act,
cleanup,
fireEvent,
render,
renderHook,
screen,
} from '@testing-library/react';
import { afterEach, expect, it, vi } from 'vitest';
import { useDirectActiveTurns } from '../src/features/agent-runtime/directActiveTurns';
import { ActiveProjectRunsPanel } from '../src/features/app-shell/ActiveProjectRunsPanel';
afterEach(() => cleanup());
it('读取失败后的重试定时器会在卸载后清理', async () => {
vi.useFakeTimers();
const invoke = vi.fn(async () => {
throw new Error('temporarily unavailable');
});
const clearTimeoutSpy = vi.spyOn(window, 'clearTimeout');
try {
const { unmount } = renderHook(() =>
useDirectActiveTurns({ invoke, enabled: true }),
);
await act(async () => {
await vi.advanceTimersByTimeAsync(0);
});
expect(invoke).toHaveBeenCalledTimes(1);
unmount();
expect(clearTimeoutSpy).toHaveBeenCalled();
await act(async () => {
await vi.advanceTimersByTimeAsync(1_000);
});
expect(invoke).toHaveBeenCalledTimes(1);
} finally {
vi.useRealTimers();
clearTimeoutSpy.mockRestore();
}
});
it('按开始时间展示正在运行的项目并支持进入项目', () => {
const onOpenProject = vi.fn();
render(