Files
prompt-optimizer/packages/web/tests/unit/App.test.js
T
linshen c1acf7d7b6 chore: Update project dependencies and development scripts
- Upgrade Vite, Vitest, and Vue-related dependencies to latest versions
- Modify package scripts for improved development workflow
- Update environment variable loading configuration
- Enhance test configuration and mocking strategies
- Simplify root and package-level scripts
- Improve cross-platform development support
2025-02-23 21:44:38 +08:00

172 lines
4.7 KiB
JavaScript

import { describe, it, expect, beforeEach, vi } from 'vitest'
import { mount } from '@vue/test-utils'
import { nextTick, ref } from 'vue'
import App from '../../src/App.vue'
import ElementPlus from 'element-plus'
import { createTestingPinia } from '@pinia/testing'
// Mock toast functions
const mockSuccess = vi.fn()
const mockError = vi.fn()
const mockInfo = vi.fn()
const mockWarning = vi.fn()
// 创建模拟管理器
const mockModelManager = vi.hoisted(() => ({
init: vi.fn(),
getAllModels: vi.fn(() => [
{ key: 'test', name: 'Test Model', model: 'test-model', enabled: true }
])
}))
const mockTemplateManager = vi.hoisted(() => ({
init: vi.fn(),
clearCache: vi.fn()
}))
const mockHistoryManager = vi.hoisted(() => ({
init: vi.fn(),
clearHistory: vi.fn()
}))
// Mock UI package
vi.mock('@prompt-optimizer/ui', () => ({
useToast: () => ({
success: mockSuccess,
error: mockError,
info: mockInfo,
warning: mockWarning
}),
useServiceInitializer: () => ({
promptServiceRef: ref({}),
initBaseServices: vi.fn()
}),
usePromptOptimizer: () => ({
prompt: ref(''),
optimizedPrompt: ref(''),
isOptimizing: ref(false),
isIterating: ref(false),
selectedOptimizeTemplate: ref(null),
selectedIterateTemplate: ref(null),
optimizeModel: ref('test'),
currentVersions: ref([]),
currentVersionId: ref(null),
currentChainId: ref(null),
handleOptimizePrompt: vi.fn(),
handleIteratePrompt: vi.fn(),
handleSwitchVersion: vi.fn(),
saveTemplateSelection: vi.fn(),
initTemplateSelection: vi.fn()
}),
usePromptTester: () => ({
testContent: ref(''),
testResult: ref(''),
testError: ref(''),
isTesting: ref(false),
selectedModel: ref('test'),
handleTest: vi.fn()
}),
useModelSelectors: () => ({
optimizeModelSelect: ref('test'),
testModelSelect: ref('test')
}),
useModelManager: () => ({
showConfig: ref(false),
selectedOptimizeModel: ref('test'),
selectedTestModel: ref('test'),
handleModelManagerClose: vi.fn(),
handleModelsUpdated: vi.fn(),
handleModelSelect: vi.fn()
}),
usePromptHistory: () => ({
showHistory: ref(false),
historyChains: ref([]),
handleHistoryOpen: vi.fn(),
handleHistoryClose: vi.fn(),
handleSelectHistory: vi.fn(),
handleClearHistory: vi.fn()
}),
useHistoryManager: () => ({
history: ref([]),
showHistory: ref(false),
handleSelectHistory: vi.fn(),
handleClearHistory: vi.fn(),
handleHistoryOpen: vi.fn(),
handleHistoryClose: vi.fn()
}),
useTemplateManager: () => ({
showTemplateManager: ref(false),
currentTemplateType: ref('optimize'),
handleTemplateManagerOpen: vi.fn(),
handleTemplateManagerClose: vi.fn(),
handleTemplateSelect: vi.fn(),
handleTemplateCreate: vi.fn(),
handleTemplateUpdate: vi.fn(),
handleTemplateDelete: vi.fn(),
openTemplateManager: vi.fn()
}),
// 模拟所有UI组件
MainLayoutUI: { template: '<div><slot name="title"></slot><slot></slot><slot name="actions"></slot><slot name="modals"></slot></div>' },
ContentCardUI: { template: '<div><slot></slot></div>' },
InputPanelUI: { template: '<div><slot></slot></div>' },
PromptPanelUI: { template: '<div><slot></slot></div>' },
OutputPanelUI: { template: '<div><slot></slot></div>' },
ActionButtonUI: { template: '<button><slot></slot></button>' },
TemplateSelectUI: { template: '<div><slot></slot></div>' },
ModelSelectUI: { template: '<div><slot></slot></div>' },
TemplateManagerUI: { template: '<div><slot></slot></div>' },
HistoryDrawerUI: { template: '<div><slot></slot></div>' },
ModelManagerUI: { template: '<div><slot></slot></div>' },
// 重新导出core的内容
modelManager: mockModelManager,
historyManager: mockHistoryManager,
templateManager: mockTemplateManager
}))
// 移除重复的mock
vi.mock('@prompt-optimizer/core', () => ({}))
describe('App.vue', () => {
let wrapper
beforeEach(async () => {
// 重置所有mock
mockInfo.mockClear()
mockWarning.mockClear()
mockSuccess.mockClear()
mockError.mockClear()
// 初始化模板管理器和历史记录管理器
mockTemplateManager.init.mockClear()
mockHistoryManager.init.mockClear()
// 设置组件
wrapper = mount(App, {
global: {
plugins: [
ElementPlus,
createTestingPinia({
createSpy: vi.fn
})
],
stubs: 'shallow'
}
})
// 等待组件初始化完成
await nextTick()
})
describe('基本集成测试', () => {
it('应该能够成功挂载组件', async () => {
expect(wrapper.vm).toBeDefined()
})
})
// 清理
afterEach(async () => {
if (wrapper) {
wrapper.unmount()
}
})
})