Files
MyGoNavi/frontend/src/components/LanguageSettingsPanel.test.tsx
tianqijiuyun-latiao 558966a129 feat(i18n): 推进六语言多语言体系与扫描门禁
- 新增共享六语言词典、前端 i18n 运行时与语言设置入口

- 推进连接、驱动、数据网格、查询、AI、Redis、表设计等模块文案本地化

- 补充 raw 边界、SQL/驱动/更新场景测试与 i18n 扫描工具
2026-06-15 14:35:08 +08:00

46 lines
1.4 KiB
TypeScript

import React from "react";
import { act, create } from "react-test-renderer";
import { describe, expect, it, vi } from "vitest";
import { I18nProvider } from "../i18n/provider";
import LanguageSettingsPanel from "./LanguageSettingsPanel";
vi.mock("../i18n/runtime", () => ({
syncLanguageRuntime: vi.fn(async () => undefined),
}));
describe("LanguageSettingsPanel", () => {
it("renders language options and updates preference", async () => {
const onPreferenceChange = vi.fn();
let renderer: ReturnType<typeof create>;
await act(async () => {
renderer = create(
<I18nProvider
preference="system"
systemLanguages={["en-US"]}
onPreferenceChange={onPreferenceChange}
>
<LanguageSettingsPanel />
</I18nProvider>,
);
});
const text = JSON.stringify(renderer!.toJSON());
expect(text).toContain("Language");
expect(text).toContain("Follow system");
expect(text).toContain("Simplified Chinese");
expect(text).toContain("繁體中文");
expect(text).toContain("English");
expect(text).toContain("日本語");
expect(text).toContain("Deutsch");
expect(text).toContain("Русский");
const segmented = renderer!.root.findByProps({ "aria-label": "Language" });
await act(async () => {
segmented.props.onChange("zh-CN");
});
expect(onPreferenceChange).toHaveBeenCalledWith("zh-CN");
});
});