import { beforeEach, describe, expect, it, vi } from 'vitest' import { mount } from '@vue/test-utils' import { createTestPinia, createTestRouter } from '../helpers/app' import App from '@/App.vue' import { useI18nStore } from '@/stores/i18n' import { uiConfig } from '@/components/ui/config' import { resetUIConfig } from '@/components/ui' const loadDataApi = vi.fn() vi.mock('@/services/api', () => ({ loadDataApi: (...args) => loadDataApi(...args), })) async function mountApp() { const pinia = createTestPinia() const router = createTestRouter('/dashboard') await router.isReady() const wrapper = mount(App, { global: { plugins: [pinia, router], stubs: { FpsMonitor: true } }, }) await wrapper.vm.$nextTick() return { wrapper, i18n: useI18nStore() } } beforeEach(() => { localStorage.clear() sessionStorage.clear() loadDataApi.mockReset() loadDataApi.mockResolvedValue({ data: [] }) resetUIConfig() }) describe('App 语言联动(表单布局 + 译文)', () => { it('中文 → 表单横排,并按当前语言加载译文', async () => { const { i18n } = await mountApp() i18n.setLocale('zh-CN') await Promise.resolve() expect(uiConfig.form.layout).toBe('horizontal') expect(loadDataApi.mock.calls.some(([, cond]) => String(cond).includes("b_locale = N'zh-CN'"))).toBe( true, ) }) it('切到英文 → 表单竖排,并重新拉取 en-US 译文', async () => { const { i18n } = await mountApp() i18n.setLocale('en-US') await Promise.resolve() await Promise.resolve() expect(uiConfig.form.layout).toBe('vertical') expect(loadDataApi.mock.calls.some(([, cond]) => String(cond).includes("b_locale = N'en-US'"))).toBe( true, ) }) })