KeyMetrics.test.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import React from 'react';
  2. import { render, screen } from '@testing-library/react';
  3. import { describe, it, expect } from 'vitest';
  4. import KeyMetrics from '@/client/home/pages/SupplyChainDashboards/components/KeyMetrics';
  5. describe('KeyMetrics', () => {
  6. it('should render with default metrics and title', () => {
  7. render(<KeyMetrics />);
  8. // Check title and subtitle
  9. expect(screen.getByText('优质稻米')).toBeInTheDocument();
  10. expect(screen.getByText('产业链联合体')).toBeInTheDocument();
  11. // Check default metrics
  12. expect(screen.getByText('加工能力达')).toBeInTheDocument();
  13. expect(screen.getByText('自建优质水稻基地')).toBeInTheDocument();
  14. expect(screen.getByText('储备仓容')).toBeInTheDocument();
  15. // Check units
  16. expect(screen.getByText('万吨/年')).toBeInTheDocument();
  17. expect(screen.getByText('万亩')).toBeInTheDocument();
  18. expect(screen.getByText('万吨')).toBeInTheDocument();
  19. // Check data source
  20. expect(screen.getByText('数据来源:省粮油集团统计年报')).toBeInTheDocument();
  21. });
  22. it('should render with custom title and subtitle', () => {
  23. render(
  24. <KeyMetrics
  25. title="测试标题"
  26. subtitle="测试副标题"
  27. />
  28. );
  29. expect(screen.getByText('测试标题')).toBeInTheDocument();
  30. expect(screen.getByText('测试副标题')).toBeInTheDocument();
  31. });
  32. it('should render with custom metrics', () => {
  33. const customMetrics = [
  34. {
  35. title: '自定义指标1',
  36. value: '123',
  37. unit: '个',
  38. digits: ['1', '2', '3']
  39. },
  40. {
  41. title: '自定义指标2',
  42. value: '45',
  43. unit: '件',
  44. digits: ['4', '5']
  45. }
  46. ];
  47. render(<KeyMetrics metrics={customMetrics} />);
  48. // Check custom metrics
  49. expect(screen.getByText('自定义指标1')).toBeInTheDocument();
  50. expect(screen.getByText('自定义指标2')).toBeInTheDocument();
  51. // Check custom units
  52. expect(screen.getByText('个')).toBeInTheDocument();
  53. expect(screen.getByText('件')).toBeInTheDocument();
  54. // Should not render default metrics
  55. expect(screen.queryByText('加工能力达')).not.toBeInTheDocument();
  56. });
  57. it('should render metric digits correctly', () => {
  58. render(<KeyMetrics />);
  59. // Check if digits are rendered in the data cards
  60. const processingDigits = screen.getByText('2');
  61. const baseDigits = screen.getByText('1');
  62. const storageDigits = screen.getByText('?');
  63. expect(processingDigits).toBeInTheDocument();
  64. expect(baseDigits).toBeInTheDocument();
  65. expect(storageDigits).toBeInTheDocument();
  66. // Check digit styling
  67. expect(processingDigits).toHaveClass('text-[#c5ff92]');
  68. expect(processingDigits).toHaveClass('text-[60px]');
  69. });
  70. it('should render with correct positioning and styling', () => {
  71. render(<KeyMetrics />);
  72. const container = screen.getByRole('generic');
  73. // Check positioning
  74. expect(container).toHaveClass('absolute');
  75. expect(container).toHaveClass('left-[199.88px]');
  76. expect(container).toHaveClass('top-[calc(50%+4.02px)]');
  77. // Check dimensions
  78. expect(container).toHaveClass('w-[330px]');
  79. });
  80. it('should render data cards with correct styling', () => {
  81. render(<KeyMetrics />);
  82. // Check title styling
  83. const title = screen.getByText('加工能力达');
  84. expect(title).toHaveClass('text-white');
  85. expect(title).toHaveClass('text-[40px]');
  86. // Check unit styling
  87. const unit = screen.getByText('万吨/年');
  88. expect(unit).toHaveClass('text-white');
  89. expect(unit).toHaveClass('text-[24px]');
  90. });
  91. it('should handle empty metrics array', () => {
  92. render(<KeyMetrics metrics={[]} />);
  93. // Should still render with default metrics
  94. expect(screen.getByText('加工能力达')).toBeInTheDocument();
  95. expect(screen.getByText('自建优质水稻基地')).toBeInTheDocument();
  96. expect(screen.getByText('储备仓容')).toBeInTheDocument();
  97. });
  98. });