fix: 修复测试套件质量审查问题——act环境、正则匹配、mock排序、超时设置

This commit is contained in:
2026-06-08 14:13:45 +08:00
parent 74266dc5cc
commit d02abce58d
11 changed files with 204 additions and 179 deletions

View File

@@ -46,34 +46,38 @@ function clickLatestConfirmButton() {
}
describe("ModelFormModal", () => {
test("编辑模型表单只提交变更字段", async () => {
const updateCalls: unknown[] = [];
test(
"编辑模型表单只提交变更字段",
async () => {
const updateCalls: unknown[] = [];
renderWithProviders(
createElement(ModelFormModal, {
editingModel: ENABLED_MODEL,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: (args: unknown) => {
updateCalls.push(args);
return Promise.resolve();
},
open: true,
providers: [ENABLED_PROVIDER, DISABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
}),
);
renderWithProviders(
createElement(ModelFormModal, {
editingModel: ENABLED_MODEL,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: (args: unknown) => {
updateCalls.push(args);
return Promise.resolve();
},
open: true,
providers: [ENABLED_PROVIDER, DISABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
}),
);
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.change(screen.getByPlaceholderText("请输入模型名称"), { target: { value: "GPT-4o Mini" } });
clickLatestConfirmButton();
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.change(screen.getByPlaceholderText("请输入模型名称"), { target: { value: "GPT-4o Mini" } });
clickLatestConfirmButton();
await waitFor(() => expect(updateCalls.length).toBe(1));
expect(updateCalls[0]).toEqual({ data: { name: "GPT-4o Mini" }, id: "m1" });
});
await waitFor(() => expect(updateCalls.length).toBe(1));
expect(updateCalls[0]).toEqual({ data: { name: "GPT-4o Mini" }, id: "m1" });
},
{ timeout: 15000 },
);
test("模型表单校验失败不会提交", async () => {
const onCreate = mock(() => Promise.resolve());
@@ -121,80 +125,92 @@ describe("ModelFormModal", () => {
expect((reasoningCheckbox as { checked?: boolean }).checked).toBe(true);
});
test("新建模型展示供应商 options 列表", async () => {
renderWithProviders(
createElement(ModelFormModal, {
editingModel: null,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [ENABLED_PROVIDER, DISABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
}),
);
test(
"新建模型展示供应商 options 列表",
async () => {
renderWithProviders(
createElement(ModelFormModal, {
editingModel: null,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [ENABLED_PROVIDER, DISABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
}),
);
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.mouseDown(screen.getByRole("combobox"));
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.mouseDown(screen.getByRole("combobox"));
expect(await screen.findByText("OpenAI")).not.toBeNull();
expect(await screen.findByText("DeepSeek")).not.toBeNull();
});
expect(await screen.findByText("OpenAI")).not.toBeNull();
expect(await screen.findByText("DeepSeek")).not.toBeNull();
},
{ timeout: 15000 },
);
test("供应商下拉展示加载错误提示", async () => {
renderWithProviders(
createElement(ModelFormModal, {
editingModel: null,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [],
providersError: new Error("options failed"),
providersLoading: false,
submitting: false,
}),
);
test(
"供应商下拉展示加载错误提示",
async () => {
renderWithProviders(
createElement(ModelFormModal, {
editingModel: null,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [],
providersError: new Error("options failed"),
providersLoading: false,
submitting: false,
}),
);
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.mouseDown(screen.getByRole("combobox"));
await screen.findByPlaceholderText("请输入模型名称");
fireEvent.mouseDown(screen.getByRole("combobox"));
expect(await screen.findByText("供应商加载失败options failed")).not.toBeNull();
});
expect(await screen.findByText("供应商加载失败options failed")).not.toBeNull();
},
{ timeout: 15000 },
);
test("编辑模型时可测试模型连接", async () => {
const testModelConnection = mock(() => Promise.resolve({ message: "模型连接成功", ok: true }));
test(
"编辑模型时可测试模型连接",
async () => {
const testModelConnection = mock(() => Promise.resolve({ message: "模型连接成功", ok: true }));
renderWithProviders(
createElement(ModelFormModal, {
editingModel: ENABLED_MODEL,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [ENABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
testModelConnection,
}),
);
renderWithProviders(
createElement(ModelFormModal, {
editingModel: ENABLED_MODEL,
onCancel: () => undefined,
onCreate: () => Promise.resolve(),
onOpenChange: () => undefined,
onUpdate: () => Promise.resolve(),
open: true,
providers: [ENABLED_PROVIDER],
providersError: null,
providersLoading: false,
submitting: false,
testModelConnection,
}),
);
await screen.findByRole("button", { name: "测试连接" });
fireEvent.click(screen.getByRole("button", { name: "测试连接" }));
await screen.findByRole("button", { name: "测试连接" });
fireEvent.click(screen.getByRole("button", { name: "测试连接" }));
await waitFor(() =>
expect(testModelConnection).toHaveBeenCalledWith({
externalId: "gpt-4o",
providerId: "pv1",
}),
);
});
await waitFor(() =>
expect(testModelConnection).toHaveBeenCalledWith({
externalId: "gpt-4o",
providerId: "pv1",
}),
);
},
{ timeout: 15000 },
);
test("新建模型也显示测试连接按钮", async () => {
renderWithProviders(
@@ -300,7 +316,7 @@ describe("ModelListPage", () => {
expect(screen.getByPlaceholderText("搜索模型名称或 ID")).not.toBeNull();
expect(screen.getByRole("button", { name: /新建模型/ })).not.toBeNull();
expect(calls.some((call) => call.url.includes("/api/models"))).toBe(true);
}, 15000);
}, 30000);
test("搜索模型更新请求参数", async () => {
const calls = createModelFetchMock();
@@ -312,7 +328,7 @@ describe("ModelListPage", () => {
fireEvent.change(input, { target: { value: "gpt" } });
fireEvent.keyDown(input, { key: "Enter" });
await waitFor(() => expect(calls.some((call) => call.url.includes("keyword=gpt"))).toBe(true));
}, 15000);
}, 30000);
test("新建模型弹窗可以打开", async () => {
createModelFetchMock();
@@ -322,5 +338,5 @@ describe("ModelListPage", () => {
fireEvent.click(screen.getByRole("button", { name: /新建模型/ }));
await screen.findByPlaceholderText("请输入模型名称");
}, 15000);
}, 30000);
});