BankCardItem.test.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * BankCardItem 组件测试
  3. */
  4. import React from 'react'
  5. import { render, screen } from '@testing-library/react'
  6. import '@testing-library/jest-dom'
  7. import BankCardItem, { BankCardInfo } from '../../../src/components/BankCardItem'
  8. import { maskCardNumber } from '../../../src/utils/maskUtils'
  9. describe('BankCardItem', () => {
  10. const mockBankCard: BankCardInfo = {
  11. id: 1,
  12. subBankName: '中国工商银行北京分行朝阳支行',
  13. bankName: '中国工商银行',
  14. cardNumber: '6222020200001234567',
  15. cardholderName: '张三',
  16. cardType: '一类卡',
  17. isDefault: 1,
  18. fileUrl: null
  19. }
  20. it('应该正确渲染银行卡信息', () => {
  21. const { container } = render(<BankCardItem bankCard={mockBankCard} />)
  22. expect(screen.getByText('中国工商银行')).toBeInTheDocument()
  23. expect(screen.getByText(maskCardNumber('6222020200001234567'))).toBeInTheDocument()
  24. expect(screen.getByText('一类卡')).toBeInTheDocument()
  25. expect(screen.getByText('持卡人:张三')).toBeInTheDocument()
  26. // 检查蓝色背景样式
  27. const cardElement = container.querySelector('.bg-blue-50')
  28. expect(cardElement).toBeInTheDocument()
  29. })
  30. it('应该为默认卡显示默认标识', () => {
  31. render(<BankCardItem bankCard={mockBankCard} />)
  32. expect(screen.getByText('默认')).toBeInTheDocument()
  33. })
  34. it('不应该为非默认卡显示默认标识', () => {
  35. const nonDefaultCard = { ...mockBankCard, isDefault: 0 }
  36. render(<BankCardItem bankCard={nonDefaultCard} />)
  37. expect(screen.queryByText('默认')).not.toBeInTheDocument()
  38. })
  39. it('应该正确脱敏卡号', () => {
  40. render(<BankCardItem bankCard={mockBankCard} />)
  41. // 卡号应该脱敏显示为: **** **** **** 4567
  42. expect(screen.getByText('**** **** **** 4567')).toBeInTheDocument()
  43. })
  44. it('应该在bankName为null时使用subBankName', () => {
  45. const cardWithoutBankName = { ...mockBankCard, bankName: null }
  46. render(<BankCardItem bankCard={cardWithoutBankName} />)
  47. expect(screen.getByText('中国工商银行北京分行朝阳支行')).toBeInTheDocument()
  48. })
  49. it('不应该在cardType为null时渲染卡类型', () => {
  50. const cardWithoutType = { ...mockBankCard, cardType: null }
  51. render(<BankCardItem bankCard={cardWithoutType} />)
  52. // 卡类型不应该被渲染
  53. expect(screen.queryByText('一类卡')).not.toBeInTheDocument()
  54. })
  55. })