Button.integration.test.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { describe, it, expect } from 'vitest';
  2. import { render, screen } from '@testing-library/react';
  3. import userEvent from '@testing-library/user-event';
  4. import { TestWrapper } from '../../__test_utils__/test-render';
  5. // 假设有一个简单的Button组件
  6. function Button({ onClick, children }: { onClick: () => void; children: React.ReactNode }) {
  7. return (
  8. <button
  9. onClick={onClick}
  10. className="bg-blue-500 text-white px-4 py-2 rounded"
  11. data-testid="test-button"
  12. >
  13. {children}
  14. </button>
  15. );
  16. }
  17. describe('Button Component Integration Tests', () => {
  18. it('应该渲染按钮并显示正确的文本', () => {
  19. render(
  20. <TestWrapper>
  21. <Button onClick={() => {}}>Click Me</Button>
  22. </TestWrapper>
  23. );
  24. const button = screen.getByTestId('test-button');
  25. expect(button).toBeInTheDocument();
  26. expect(button).toHaveTextContent('Click Me');
  27. });
  28. it('应该在点击时调用onClick处理函数', async () => {
  29. const user = userEvent.setup();
  30. const handleClick = vi.fn();
  31. render(
  32. <TestWrapper>
  33. <Button onClick={handleClick}>Click Me</Button>
  34. </TestWrapper>
  35. );
  36. const button = screen.getByTestId('test-button');
  37. await user.click(button);
  38. expect(handleClick).toHaveBeenCalledTimes(1);
  39. });
  40. it('应该具有正确的样式类', () => {
  41. render(
  42. <TestWrapper>
  43. <Button onClick={() => {}}>Click Me</Button>
  44. </TestWrapper>
  45. );
  46. const button = screen.getByTestId('test-button');
  47. expect(button).toHaveClass('bg-blue-500');
  48. expect(button).toHaveClass('text-white');
  49. expect(button).toHaveClass('px-4');
  50. expect(button).toHaveClass('py-2');
  51. expect(button).toHaveClass('rounded');
  52. });
  53. });