indicator-change.test.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * 指标变化规则纯函数单测
  3. * 规则来源:design.md §8 变化颜色与箭头规则表
  4. */
  5. import * as ic from '@/utils/indicator-change'
  6. describe('indicator-change 变化规则', () => {
  7. describe('resolveChangeStyle(goodDirection, movement)', () => {
  8. test('higher_is_better + up → 改善/绿 ↑', () => {
  9. const s = ic.resolveChangeStyle('higher_is_better', 'up')
  10. expect(s.trendLabel).toBe('改善')
  11. expect(s.cssClass).toBe('impr-up')
  12. expect(s.arrow).toBe('↑')
  13. })
  14. test('higher_is_better + down → 恶化/红 ↓', () => {
  15. const s = ic.resolveChangeStyle('higher_is_better', 'down')
  16. expect(s.trendLabel).toBe('恶化')
  17. expect(s.cssClass).toBe('worst-down')
  18. expect(s.arrow).toBe('↓')
  19. })
  20. test('lower_is_better + up → 恶化/红 ↑ (如炎症水平上升)', () => {
  21. const s = ic.resolveChangeStyle('lower_is_better', 'up')
  22. expect(s.trendLabel).toBe('恶化')
  23. expect(s.cssClass).toBe('worst-up')
  24. expect(s.arrow).toBe('↑')
  25. })
  26. test('lower_is_better + down → 改善/绿 ↓ (如炎症水平下降)', () => {
  27. const s = ic.resolveChangeStyle('lower_is_better', 'down')
  28. expect(s.trendLabel).toBe('改善')
  29. expect(s.cssClass).toBe('impr-down')
  30. expect(s.arrow).toBe('↓')
  31. })
  32. test('neutral + up/down → 中性/灰', () => {
  33. const up = ic.resolveChangeStyle('neutral', 'up')
  34. const down = ic.resolveChangeStyle('neutral', 'down')
  35. expect(up.trendLabel).toBe('中性')
  36. expect(up.cssClass).toBe('neutral-up')
  37. expect(down.cssClass).toBe('neutral-down')
  38. })
  39. test('flat → 无变化/灰 →', () => {
  40. const s = ic.resolveChangeStyle('higher_is_better', 'flat')
  41. expect(s.trendLabel).toBe('中性')
  42. expect(s.cssClass).toBe('flat')
  43. expect(s.arrow).toBe('→')
  44. })
  45. test('未知 goodDirection 兜底为中性', () => {
  46. const s = ic.resolveChangeStyle('unknown_direction', 'up')
  47. expect(s.cssClass).toBe('neutral-up')
  48. })
  49. })
  50. describe('formatDelta(delta, deltaPct)', () => {
  51. test('正 delta 显示 + 并带百分比', () => {
  52. expect(ic.formatDelta(2, 100)).toBe('+2 (+100%)')
  53. })
  54. test('负 delta 显示 -', () => {
  55. expect(ic.formatDelta(-1.5, -30)).toBe('-1.5 (-30%)')
  56. })
  57. test('null 安全', () => {
  58. expect(ic.formatDelta(null, null)).toBe('--')
  59. expect(ic.formatDelta(0, 0)).toBe('0 (0%)')
  60. })
  61. })
  62. })