AttendanceStats.test.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * AttendanceStats组件测试
  3. */
  4. import React from 'react'
  5. import { render, screen } from '@testing-library/react'
  6. import '@testing-library/jest-dom'
  7. import { AttendanceStats } from '@/components/AttendanceStats'
  8. import { AttendanceStats as AttendanceStatsType } from '@/types/attendance'
  9. describe('AttendanceStats组件', () => {
  10. const mockStats: AttendanceStatsType = {
  11. attendanceRate: 100,
  12. normalDays: 28,
  13. lateCount: 2,
  14. earlyLeaveCount: 1,
  15. absentCount: 0
  16. }
  17. test('应该渲染考勤统计数据', () => {
  18. render(<AttendanceStats stats={mockStats} />)
  19. expect(screen.getByText('100%')).toBeInTheDocument()
  20. expect(screen.getByText('28天')).toBeInTheDocument()
  21. })
  22. test('应该渲染出勤率标签', () => {
  23. render(<AttendanceStats stats={mockStats} />)
  24. expect(screen.getByText('出勤率')).toBeInTheDocument()
  25. })
  26. test('应该渲染正常出勤标签', () => {
  27. render(<AttendanceStats stats={mockStats} />)
  28. expect(screen.getByText('正常出勤')).toBeInTheDocument()
  29. })
  30. test('应该渲染异常统计数据', () => {
  31. render(<AttendanceStats stats={mockStats} />)
  32. expect(screen.getByText('迟到: 2次')).toBeInTheDocument()
  33. expect(screen.getByText('早退: 1次')).toBeInTheDocument()
  34. expect(screen.getByText('缺勤: 0次')).toBeInTheDocument()
  35. })
  36. test('应该正确渲染零统计数据', () => {
  37. const zeroStats: AttendanceStatsType = {
  38. attendanceRate: 0,
  39. normalDays: 0,
  40. lateCount: 0,
  41. earlyLeaveCount: 0,
  42. absentCount: 0
  43. }
  44. render(<AttendanceStats stats={zeroStats} />)
  45. expect(screen.getByText('0%')).toBeInTheDocument()
  46. expect(screen.getByText('0天')).toBeInTheDocument()
  47. expect(screen.getByText('迟到: 0次')).toBeInTheDocument()
  48. expect(screen.getByText('早退: 0次')).toBeInTheDocument()
  49. expect(screen.getByText('缺勤: 0次')).toBeInTheDocument()
  50. })
  51. })