mirror of
https://github.com/linshenkx/prompt-optimizer.git
synced 2026-07-02 11:24:45 +08:00
- split UI locale packs into en-US, zh-CN, and zh-TW modules - switch runtime defaults, docs, and repository guidance toward an English-first baseline - update core, MCP, and UI runtime copy to remove hardcoded Chinese fallbacks - add locale parity and no-hardcoded-runtime guardrails across the repo
106 lines
3.0 KiB
JavaScript
106 lines
3.0 KiB
JavaScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
import { mount } from '@vue/test-utils'
|
|
import { nextTick } from 'vue'
|
|
import LanguageSwitchDropdown from '../../../src/components/LanguageSwitchDropdown.vue'
|
|
|
|
vi.mock('vue-i18n', async (importOriginal) => {
|
|
const actual = await importOriginal()
|
|
|
|
return {
|
|
...actual,
|
|
useI18n: () => ({
|
|
t: (key, params = {}) => {
|
|
const dictionary = {
|
|
'settings.languageSwitcher.label': 'Switch language',
|
|
'settings.languageSwitcher.ariaLabel': `Switch language (${params.language ?? ''})`,
|
|
'settings.languageSwitcher.languages.zh-CN': 'Chinese (Simplified)',
|
|
'settings.languageSwitcher.languages.zh-TW': 'Chinese (Traditional)',
|
|
'settings.languageSwitcher.languages.en-US': 'English'
|
|
}
|
|
|
|
return dictionary[key] ?? key
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
// Mock Naive UI components
|
|
vi.mock('naive-ui', () => ({
|
|
NButton: {
|
|
name: 'NButton',
|
|
template: '<button><slot name="icon"></slot><slot></slot></button>',
|
|
props: ['title', 'ariaLabel']
|
|
},
|
|
NDropdown: {
|
|
name: 'NDropdown',
|
|
template: '<div><slot></slot></div>',
|
|
emits: ['select'],
|
|
props: ['options', 'placement', 'trigger']
|
|
}
|
|
}))
|
|
|
|
// Mock服务注入
|
|
const mockServices = {
|
|
value: {
|
|
preferenceService: {
|
|
get: vi.fn().mockResolvedValue('zh-CN'),
|
|
set: vi.fn().mockResolvedValue(true)
|
|
}
|
|
}
|
|
}
|
|
|
|
describe('LanguageSwitchDropdown', () => {
|
|
let wrapper
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
const createWrapper = (props = {}) => {
|
|
return mount(LanguageSwitchDropdown, {
|
|
global: {
|
|
provide: {
|
|
services: mockServices
|
|
}
|
|
},
|
|
props
|
|
})
|
|
}
|
|
|
|
describe('基本功能', () => {
|
|
it('应该正确渲染组件', () => {
|
|
wrapper = createWrapper()
|
|
expect(wrapper.vm).toBeDefined()
|
|
})
|
|
|
|
it('应该通过 locale 提供语言选项文案', () => {
|
|
wrapper = createWrapper()
|
|
const vm = wrapper.vm
|
|
expect(vm.availableLanguages).toHaveLength(3)
|
|
expect(vm.availableLanguages[0].key).toBe('zh-CN')
|
|
expect(vm.availableLanguages[0].label).toBe('Chinese (Simplified)')
|
|
expect(vm.availableLanguages[1].key).toBe('zh-TW')
|
|
expect(vm.availableLanguages[1].label).toBe('Chinese (Traditional)')
|
|
expect(vm.availableLanguages[2].key).toBe('en-US')
|
|
expect(vm.availableLanguages[2].label).toBe('English')
|
|
})
|
|
|
|
it('应该通过 locale 生成当前语言提示文案', () => {
|
|
wrapper = createWrapper()
|
|
const vm = wrapper.vm
|
|
|
|
expect(vm.currentLanguageLabel).toBe('Switch language (English)')
|
|
})
|
|
|
|
it('应该能够调用语言切换方法', async () => {
|
|
wrapper = createWrapper()
|
|
const vm = wrapper.vm
|
|
|
|
// 只验证方法能被调用,不测试具体的切换逻辑
|
|
expect(typeof vm.handleLanguageSelect).toBe('function')
|
|
await vm.handleLanguageSelect('en-US')
|
|
expect(mockServices.value.preferenceService.set).toHaveBeenCalled()
|
|
})
|
|
})
|
|
})
|