|
|
@@ -0,0 +1,64 @@
|
|
|
+/**
|
|
|
+ * 指标变化规则纯函数单测
|
|
|
+ * 规则来源: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 显示 + 并带百分比', () => {
|
|
|
+ expect(ic.formatDelta(2, 100)).toBe('+2 (+100%)')
|
|
|
+ })
|
|
|
+ test('负 delta 显示 -', () => {
|
|
|
+ expect(ic.formatDelta(-1.5, -30)).toBe('-1.5 (-30%)')
|
|
|
+ })
|
|
|
+ test('null 安全', () => {
|
|
|
+ expect(ic.formatDelta(null, null)).toBe('--')
|
|
|
+ expect(ic.formatDelta(0, 0)).toBe('0 (0%)')
|
|
|
+ })
|
|
|
+ })
|
|
|
+})
|