AttendanceRecordItem.test.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * AttendanceRecordItem组件测试
  3. */
  4. import React from 'react'
  5. import { render, screen } from '@testing-library/react'
  6. import '@testing-library/jest-dom'
  7. import { AttendanceRecordItem } from '@/components/AttendanceRecordItem'
  8. import { AttendanceRecord, AttendanceStatus } from '@/types/attendance'
  9. describe('AttendanceRecordItem组件', () => {
  10. const mockRecord: AttendanceRecord = {
  11. date: '2023-11-25',
  12. weekday: '星期六',
  13. checkInTime: '08:30',
  14. checkOutTime: '17:30',
  15. status: AttendanceStatus.NORMAL
  16. }
  17. test('应该渲染打卡记录信息', () => {
  18. render(<AttendanceRecordItem record={mockRecord} />)
  19. // 日期和星期在同一元素中
  20. expect(screen.getByText((content) => content.includes('11月25日'))).toBeInTheDocument()
  21. expect(screen.getByText((content) => content.includes('星期六'))).toBeInTheDocument()
  22. expect(screen.getByText('上班: 08:30')).toBeInTheDocument()
  23. expect(screen.getByText('下班: 17:30')).toBeInTheDocument()
  24. })
  25. test('应该渲染正常状态标签', () => {
  26. render(<AttendanceRecordItem record={mockRecord} />)
  27. expect(screen.getByText('正常')).toBeInTheDocument()
  28. })
  29. test('应该渲染迟到状态标签', () => {
  30. const lateRecord: AttendanceRecord = {
  31. ...mockRecord,
  32. status: AttendanceStatus.LATE,
  33. checkInTime: '09:15'
  34. }
  35. render(<AttendanceRecordItem record={lateRecord} />)
  36. expect(screen.getByText('迟到')).toBeInTheDocument()
  37. expect(screen.getByText('上班: 09:15')).toBeInTheDocument()
  38. })
  39. test('应该渲染早退状态标签', () => {
  40. const earlyRecord: AttendanceRecord = {
  41. ...mockRecord,
  42. status: AttendanceStatus.EARLY_LEAVE,
  43. checkOutTime: '16:30'
  44. }
  45. render(<AttendanceRecordItem record={earlyRecord} />)
  46. expect(screen.getByText('早退')).toBeInTheDocument()
  47. expect(screen.getByText('下班: 16:30')).toBeInTheDocument()
  48. })
  49. test('应该渲染缺勤状态标签', () => {
  50. const absentRecord: AttendanceRecord = {
  51. ...mockRecord,
  52. status: AttendanceStatus.ABSENT,
  53. checkInTime: '--:--',
  54. checkOutTime: '--:--'
  55. }
  56. render(<AttendanceRecordItem record={absentRecord} />)
  57. expect(screen.getByText('缺勤')).toBeInTheDocument()
  58. expect(screen.getByText('上班: --:--')).toBeInTheDocument()
  59. expect(screen.getByText('下班: --:--')).toBeInTheDocument()
  60. })
  61. test('应该正确处理未打卡情况', () => {
  62. const noCheckOutRecord: AttendanceRecord = {
  63. ...mockRecord,
  64. checkOutTime: '--:--'
  65. }
  66. render(<AttendanceRecordItem record={noCheckOutRecord} />)
  67. expect(screen.getByText('下班: --:--')).toBeInTheDocument()
  68. })
  69. })