| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * 指标变化规则纯函数单测
- * 规则来源:design.md §8 变化颜色与箭头规则表
- */
- import * as ic from '@/utils/indicator-change'
- describe('indicator-change 变化规则', () => {
- describe('resolveChangeStyle(goodDirection, movement)', () => {
- test('higher_is_better + up → 改善/绿 ↑', () => {
- const s = ic.resolveChangeStyle('higher_is_better', 'up')
- expect(s.trendLabel).toBe('改善')
- expect(s.cssClass).toBe('impr-up')
- expect(s.arrow).toBe('↑')
- })
- test('higher_is_better + down → 恶化/红 ↓', () => {
- const s = ic.resolveChangeStyle('higher_is_better', 'down')
- expect(s.trendLabel).toBe('恶化')
- expect(s.cssClass).toBe('worst-down')
- expect(s.arrow).toBe('↓')
- })
- test('lower_is_better + up → 恶化/红 ↑ (如炎症水平上升)', () => {
- const s = ic.resolveChangeStyle('lower_is_better', 'up')
- expect(s.trendLabel).toBe('恶化')
- expect(s.cssClass).toBe('worst-up')
- expect(s.arrow).toBe('↑')
- })
- test('lower_is_better + down → 改善/绿 ↓ (如炎症水平下降)', () => {
- const s = ic.resolveChangeStyle('lower_is_better', 'down')
- expect(s.trendLabel).toBe('改善')
- expect(s.cssClass).toBe('impr-down')
- expect(s.arrow).toBe('↓')
- })
- test('neutral + up/down → 中性/灰', () => {
- const up = ic.resolveChangeStyle('neutral', 'up')
- const down = ic.resolveChangeStyle('neutral', 'down')
- expect(up.trendLabel).toBe('中性')
- expect(up.cssClass).toBe('neutral-up')
- expect(down.cssClass).toBe('neutral-down')
- })
- test('flat → 无变化/灰 →', () => {
- const s = ic.resolveChangeStyle('higher_is_better', 'flat')
- expect(s.trendLabel).toBe('中性')
- expect(s.cssClass).toBe('flat')
- expect(s.arrow).toBe('→')
- })
- test('未知 goodDirection 兜底为中性', () => {
- const s = ic.resolveChangeStyle('unknown_direction', 'up')
- expect(s.cssClass).toBe('neutral-up')
- })
- })
- describe('formatDelta(delta, deltaPct)', () => {
- test('正 delta 显示 + 并带百分比', () => {
- // PRD §6.4 有效数字:|v|<10 → 2 位小数
- expect(ic.formatDelta(2, 100)).toBe('+2.00 (+100%)')
- })
- test('负 delta 显示 -', () => {
- expect(ic.formatDelta(-1.5, -30)).toBe('-1.50 (-30%)')
- })
- test('null 安全', () => {
- expect(ic.formatDelta(null, null)).toBe('--')
- expect(ic.formatDelta(0, 0)).toBe('0.00 (0%)')
- })
- })
- })
|