usage-example.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * 测试工具使用示例
  3. * 展示如何在其他包中使用 area-management-ui 的测试工具
  4. */
  5. import { vi } from 'vitest';
  6. // 示例1:基本使用
  7. export const example1 = `
  8. // 在残疾人管理UI包的测试中
  9. import { createAreaClientMock, mockAreaData } from '@d8d/area-management-ui/test-utils';
  10. // Mock areaClient API
  11. vi.mock('@d8d/area-management-ui/api', () => createAreaClientMock());
  12. // 或者使用预设数据
  13. vi.mock('@d8d/area-management-ui/api', () => createAreaClientMock(mockAreaData.mockAllAreas));
  14. `;
  15. // 示例2:使用预设mock
  16. export const example2 = `
  17. import { presetMocks } from '@d8d/area-management-ui/test-utils';
  18. // 使用成功mock
  19. vi.mock('@d8d/area-management-ui/api', () => presetMocks.success());
  20. // 使用空数据mock
  21. vi.mock('@d8d/area-management-ui/api', () => presetMocks.empty());
  22. // 使用错误mock
  23. vi.mock('@d8d/area-management-ui/api', () => presetMocks.error('network'));
  24. `;
  25. // 示例3:完整测试示例
  26. export const example3 = `
  27. import { describe, it, expect, vi, beforeEach } from 'vitest';
  28. import { render, screen } from '@testing-library/react';
  29. import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
  30. import { createAreaClientMock, TestWrapper } from '@d8d/area-management-ui/test-utils';
  31. import YourComponent from './YourComponent';
  32. // Mock areaClient
  33. vi.mock('@d8d/area-management-ui/api', () => createAreaClientMock());
  34. describe('YourComponent', () => {
  35. beforeEach(() => {
  36. vi.clearAllMocks();
  37. });
  38. it('应该正确渲染', () => {
  39. render(
  40. <TestWrapper>
  41. <YourComponent />
  42. </TestWrapper>
  43. );
  44. expect(screen.getByText('Some content')).toBeInTheDocument();
  45. });
  46. });
  47. `;
  48. // 示例4:在残疾人管理UI包中的实际使用
  49. export const disabilityManagementExample = `
  50. // 文件:allin-packages/disability-person-management-ui/tests/integration/disability-person.integration.test.tsx
  51. import { createAreaClientMock } from '@d8d/area-management-ui/test-utils';
  52. // 替换原有的复杂mock
  53. // 原来的:
  54. // vi.mock('@d8d/area-management-ui/components', () => ({
  55. // AreaSelect: vi.fn(...),
  56. // AreaSelectForm: vi.fn(...),
  57. // }));
  58. // 现在的:
  59. vi.mock('@d8d/area-management-ui/api', () => createAreaClientMock());
  60. // 注意:现在我们不需要mock UI组件了!
  61. // 可以直接使用真实的 AreaSelect 和 AreaSelectForm 组件
  62. // 因为它们会使用我们mock的API
  63. `;
  64. // 示例5:在强权管理UI包中的使用
  65. export const orderManagementExample = `
  66. // 文件:allin-packages/order-management-ui/tests/integration/order.integration.test.tsx
  67. import { createAreaClientMock } from '@d8d/area-management-ui/test-utils';
  68. // 替换原有的mock
  69. // 原来的:
  70. // vi.mock('@d8d/area-management-ui', () => ({
  71. // AreaSelect: vi.fn(({ value, onChange }) => (...)),
  72. // }));
  73. // 现在的:
  74. vi.mock('@d8d/area-management-ui/api', () => createAreaClientMock());
  75. // 现在可以直接使用真实的 AreaSelect 组件
  76. // 组件会从mock的API获取数据
  77. `;
  78. // 优势总结
  79. export const advantages = `
  80. ## 使用测试工具的优势
  81. 1. **一致性**:所有包使用相同的mock逻辑
  82. 2. **维护性**:mock逻辑集中在一处,易于更新
  83. 3. **真实性**:使用真实组件,测试更接近实际使用
  84. 4. **简化测试**:减少重复的mock代码
  85. 5. **类型安全**:提供完整的TypeScript类型支持
  86. 6. **灵活性**:支持自定义数据和错误场景
  87. ## 迁移步骤
  88. 1. 安装或更新 area-management-ui 包
  89. 2. 导入测试工具:import { createAreaClientMock } from '@d8d/area-management-ui/test-utils'
  90. 3. 替换原有的 areaClient mock
  91. 4. 移除对 UI 组件的 mock(AreaSelect, AreaSelectForm)
  92. 5. 运行测试,确保一切正常
  93. `;