allinssl/frontend/plugin/vite-plugin-i18n/__tests__/zhipuAI.test.js

113 lines
2.6 KiB
JavaScript

import { jest } from '@jest/globals'
import axios from 'axios'
import { ZhipuAITranslator } from '../src/translation/ai/zhipuAI.js'
jest.mock('axios')
describe('ZhipuAITranslator', () => {
const apiKey = 'test-key'
let translator
beforeEach(() => {
translator = new ZhipuAITranslator(apiKey)
jest.clearAllMocks()
})
describe('generatePrompt', () => {
it('应该生成正确的提示词', () => {
const text = '你好'
const languages = ['enUS', 'jaJP']
const prompt = translator.generatePrompt(text, languages)
expect(prompt).toContain('请将以下文本翻译成')
expect(prompt).toContain('en-US, ja-JP')
expect(prompt).toContain(text)
})
})
describe('translate', () => {
const text = '你好'
const languages = ['enUS', 'jaJP']
it('应该成功调用API并返回翻译结果', async () => {
const mockResponse = {
data: {
choices: [
{
message: {
content: JSON.stringify({
'en-US': 'Hello',
'ja-JP': 'こんにちは',
}),
},
},
],
},
}
axios.post.mockResolvedValueOnce(mockResponse)
const result = await translator.translate(text, languages)
expect(axios.post).toHaveBeenCalledWith(
expect.stringContaining('/chatglm_turbo'),
expect.any(Object),
expect.objectContaining({
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
}),
)
expect(result).toEqual({
text: '你好',
translations: {
enUS: 'Hello',
jaJP: 'こんにちは',
},
})
})
it('处理API调用失败的情况', async () => {
axios.post.mockRejectedValueOnce(new Error('API调用失败'))
await expect(translator.translate(text, languages)).rejects.toThrow('智谱AI翻译失败')
})
it('处理无效的API响应', async () => {
const mockResponse = {
data: {},
}
axios.post.mockResolvedValueOnce(mockResponse)
await expect(translator.translate(text, languages)).rejects.toThrow('无效的API响应')
})
})
describe('validateApiKey', () => {
it('应该成功验证有效的API密钥', async () => {
axios.get.mockResolvedValueOnce({})
const isValid = await translator.validateApiKey()
expect(isValid).toBe(true)
expect(axios.get).toHaveBeenCalledWith(
expect.stringContaining('/validate'),
expect.objectContaining({
headers: {
Authorization: `Bearer ${apiKey}`,
},
}),
)
})
it('处理无效的API密钥', async () => {
axios.get.mockRejectedValueOnce(new Error('无效的密钥'))
const isValid = await translator.validateApiKey()
expect(isValid).toBe(false)
})
})
})