LogoutButton.test.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React from 'react'
  2. import { render, screen, fireEvent } from '@testing-library/react'
  3. import '@testing-library/jest-dom'
  4. import { LogoutButton } from '../../src/components/LogoutButton'
  5. describe('LogoutButton', () => {
  6. const mockOnPress = jest.fn()
  7. beforeEach(() => {
  8. jest.clearAllMocks()
  9. })
  10. it('应该渲染退出登录文本', () => {
  11. render(<LogoutButton onPress={mockOnPress} />)
  12. expect(screen.getByText('退出登录')).toBeInTheDocument()
  13. })
  14. it('应该渲染退出图标', () => {
  15. const { container } = render(<LogoutButton onPress={mockOnPress} />)
  16. const icon = container.querySelector('.i-heroicons-arrow-right-on-rectangle-20-solid')
  17. expect(icon).toBeInTheDocument()
  18. })
  19. it('应该应用红色背景样式', () => {
  20. const { container } = render(<LogoutButton onPress={mockOnPress} />)
  21. const bgElement = container.querySelector('.bg-red-100')
  22. expect(bgElement).toBeInTheDocument()
  23. })
  24. it('点击时应该调用onPress', () => {
  25. render(<LogoutButton onPress={mockOnPress} />)
  26. const button = screen.getByText('退出登录').closest('.flex')
  27. if (button) {
  28. fireEvent.click(button)
  29. }
  30. expect(mockOnPress).toHaveBeenCalledTimes(1)
  31. })
  32. it('正在退出时应该显示"退出中..."', () => {
  33. render(<LogoutButton onPress={mockOnPress} isLoggingOut={true} />)
  34. expect(screen.getByText('退出中...')).toBeInTheDocument()
  35. })
  36. it('正常状态应该显示"退出登录"', () => {
  37. render(<LogoutButton onPress={mockOnPress} isLoggingOut={false} />)
  38. expect(screen.getByText('退出登录')).toBeInTheDocument()
  39. })
  40. })