dify/web/app/components/evaluation/__tests__/default-metric-descriptions.spec.ts
2026-04-13 14:13:04 +08:00

35 lines
1.8 KiB
TypeScript

import { getDefaultMetricDescription, getDefaultMetricDescriptionI18nKey, getTranslatedMetricDescription } from '../default-metric-descriptions'
describe('default metric descriptions', () => {
it('should resolve descriptions for kebab-case metric ids', () => {
expect(getDefaultMetricDescription('context-precision')).toContain('retrieval pipeline returns little noise')
expect(getDefaultMetricDescription('answer-correctness')).toContain('factual accuracy and completeness')
})
it('should normalize snake_case metric ids from backend payloads', () => {
expect(getDefaultMetricDescription('CONTEXT_RECALL')).toContain('does not miss important supporting evidence')
expect(getDefaultMetricDescription('TOOL_CORRECTNESS')).toContain('tool-use strategy matches the expected behavior')
})
it('should support the legacy relevance alias', () => {
expect(getDefaultMetricDescription('relevance')).toContain('addresses the user\'s question')
})
it('should resolve i18n keys for builtin metrics', () => {
expect(getDefaultMetricDescriptionI18nKey('context-precision')).toBe('metrics.builtin.description.contextPrecision')
expect(getDefaultMetricDescriptionI18nKey('ANSWER_RELEVANCY')).toBe('metrics.builtin.description.answerRelevancy')
})
it('should use translated content when translation key exists', () => {
const t = vi.fn((key: string, options?: { defaultValue?: string }) => {
if (key === 'metrics.builtin.description.faithfulness')
return '忠实性中文文案'
return options?.defaultValue ?? key
})
expect(getTranslatedMetricDescription(t as never, 'faithfulness')).toBe('忠实性中文文案')
expect(getTranslatedMetricDescription(t as never, 'latency', 'Latency fallback')).toBe('Latency fallback')
})
})