/** * DocumentPhotoItem 组件测试 */ import React from 'react' import { render, screen } from '@testing-library/react' import '@testing-library/jest-dom' import DocumentPhotoItem, { PhotoInfo } from '../../../src/components/DocumentPhotoItem' import Taro from '@tarojs/taro' describe('DocumentPhotoItem', () => { const mockPhoto: PhotoInfo = { id: 1, photoType: '身份证', fileUrl: 'https://example.com/id-card.jpg', fileName: '身份证.jpg', uploadTime: '2024-01-01T10:30:00Z', canDownload: 1 } beforeEach(() => { ;(Taro.previewImage as jest.Mock).mockClear() }) it('应该正确渲染照片信息', () => { const { container } = render() expect(screen.getByText('身份证')).toBeInTheDocument() // 检查边框样式 const borderedElement = container.querySelector('.border-gray-200') expect(borderedElement).toBeInTheDocument() }) it('应该在fileUrl为空时显示占位符', () => { const photoWithoutUrl = { ...mockPhoto, fileUrl: null } const { container } = render() // 应该显示占位图标 (使用 document 图标) const placeholderIcon = container.querySelector('.i-heroicons-document-20-solid') expect(placeholderIcon).toBeInTheDocument() }) it('应该在点击照片时调用预览', () => { const { fireEvent } = require('@testing-library/react') render() const photoContainer = screen.getByText('身份证').closest('.cursor-pointer') if (photoContainer) { fireEvent.click(photoContainer) expect(Taro.previewImage).toHaveBeenCalledWith({ current: 'https://example.com/id-card.jpg', urls: ['https://example.com/id-card.jpg'] }) } }) it('应该在fileUrl为空时不调用预览', () => { const { fireEvent } = require('@testing-library/react') const photoWithoutUrl = { ...mockPhoto, fileUrl: null } render() const photoContainer = screen.getByText('身份证').closest('.cursor-pointer') if (photoContainer) { fireEvent.click(photoContainer) expect(Taro.previewImage).not.toHaveBeenCalled() } }) })