basic.test.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { describe, it, expect, vi } from 'vitest';
  2. import { render, screen, waitFor } from '@testing-library/react';
  3. import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
  4. import { MerchantManagement } from '../src/components/MerchantManagement';
  5. // Mock API client
  6. vi.mock('../src/api/merchantClient', () => {
  7. const mockMerchantClient = {
  8. index: {
  9. $get: vi.fn(() => Promise.resolve({
  10. status: 200,
  11. body: null,
  12. json: async () => ({
  13. data: [],
  14. pagination: {
  15. total: 0,
  16. page: 1,
  17. limit: 10
  18. }
  19. })
  20. })),
  21. $post: vi.fn(() => Promise.resolve({ status: 201, body: null })),
  22. },
  23. ':id': {
  24. $put: vi.fn(() => Promise.resolve({ status: 200, body: null })),
  25. $delete: vi.fn(() => Promise.resolve({ status: 204, body: null })),
  26. },
  27. };
  28. const mockMerchantClientManager = {
  29. get: vi.fn(() => mockMerchantClient),
  30. };
  31. return {
  32. merchantClientManager: mockMerchantClientManager,
  33. merchantClient: mockMerchantClient,
  34. };
  35. });
  36. // Mock toast
  37. vi.mock('sonner', () => ({
  38. toast: {
  39. success: vi.fn(() => {}),
  40. error: vi.fn(() => {}),
  41. },
  42. }));
  43. const createTestQueryClient = () =>
  44. new QueryClient({
  45. defaultOptions: {
  46. queries: {
  47. retry: false,
  48. },
  49. },
  50. });
  51. describe('商户管理基础测试', () => {
  52. it('应该正确渲染商户管理组件', async () => {
  53. const queryClient = createTestQueryClient();
  54. render(
  55. <QueryClientProvider client={queryClient}>
  56. <MerchantManagement />
  57. </QueryClientProvider>
  58. );
  59. // 等待组件加载完成
  60. await waitFor(() => {
  61. // 验证组件标题
  62. expect(screen.getByText('商户管理')).toBeInTheDocument();
  63. expect(screen.getByText('商户列表')).toBeInTheDocument();
  64. expect(screen.getByText('管理所有商户账户信息')).toBeInTheDocument();
  65. // 验证创建按钮
  66. expect(screen.getByText('创建商户')).toBeInTheDocument();
  67. // 验证搜索框
  68. expect(screen.getByPlaceholderText('搜索商户名称、用户名、手机号...')).toBeInTheDocument();
  69. expect(screen.getByText('搜索')).toBeInTheDocument();
  70. });
  71. });
  72. });