ColumnChart.test.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /**
  2. * ColumnChart 组件基础测试
  3. */
  4. import React from 'react';
  5. import { render } from '@testing-library/react';
  6. import '@testing-library/jest-dom';
  7. import { ColumnChart } from '../../src/components/ColumnChart';
  8. declare const jest: any;
  9. declare const describe: any;
  10. declare const it: any;
  11. declare const expect: any;
  12. declare const beforeEach: any;
  13. declare const afterEach: any;
  14. // Mock @tarojs/components
  15. jest.mock('@tarojs/components', () => ({
  16. Canvas: ({ children, ...props }: any) => React.createElement('canvas', props, children)
  17. }));
  18. // Mock uCharts
  19. jest.mock('../../src/lib/charts/index.ts', () => ({
  20. uCharts: jest.fn().mockImplementation(() => ({
  21. showToolTip: jest.fn(),
  22. scrollStart: jest.fn(),
  23. scroll: jest.fn(),
  24. scrollEnd: jest.fn()
  25. }))
  26. }));
  27. describe('ColumnChart 组件', () => {
  28. beforeEach(() => {
  29. jest.clearAllMocks();
  30. });
  31. afterEach(() => {
  32. jest.restoreAllMocks();
  33. });
  34. it('应该渲染 Canvas 元素', () => {
  35. const { container } = render(
  36. <ColumnChart
  37. canvasId="test-column"
  38. categories={['A', 'B', 'C']}
  39. series={[
  40. { name: 'Series 1', data: [10, 20, 30] }
  41. ]}
  42. />
  43. );
  44. const canvas = container.querySelector('canvas');
  45. expect(canvas).toBeInTheDocument();
  46. });
  47. it('应该使用柱状图类型', () => {
  48. const { uCharts } = require('../../src/lib/charts/index.ts');
  49. render(
  50. <ColumnChart
  51. canvasId="test-column"
  52. categories={['A', 'B', 'C']}
  53. series={[
  54. { name: 'Series 1', data: [10, 20, 30] }
  55. ]}
  56. />
  57. );
  58. expect(uCharts).toHaveBeenCalledWith(
  59. expect.objectContaining({
  60. type: 'column'
  61. })
  62. );
  63. });
  64. it('应该支持分组模式', () => {
  65. const { uCharts } = require('../../src/lib/charts/index.ts');
  66. render(
  67. <ColumnChart
  68. canvasId="test-column"
  69. columnType="group"
  70. categories={['A', 'B', 'C']}
  71. series={[
  72. { name: 'Series 1', data: [10, 20, 30] }
  73. ]}
  74. />
  75. );
  76. expect(uCharts).toHaveBeenCalledWith(
  77. expect.objectContaining({
  78. extra: expect.objectContaining({
  79. column: expect.objectContaining({
  80. type: 'group'
  81. })
  82. })
  83. })
  84. );
  85. });
  86. it('应该支持堆叠模式', () => {
  87. const { uCharts } = require('../../src/lib/charts/index.ts');
  88. render(
  89. <ColumnChart
  90. canvasId="test-column"
  91. columnType="stack"
  92. categories={['A', 'B', 'C']}
  93. series={[
  94. { name: 'Series 1', data: [10, 20, 30] }
  95. ]}
  96. />
  97. );
  98. expect(uCharts).toHaveBeenCalledWith(
  99. expect.objectContaining({
  100. extra: expect.objectContaining({
  101. column: expect.objectContaining({
  102. type: 'stack'
  103. })
  104. })
  105. })
  106. );
  107. });
  108. it('应该支持自定义 tooltip 格式化', () => {
  109. const tooltipFormatter = jest.fn((item: any, category: any) => `${category}: ${item.data}`);
  110. const { container } = render(
  111. <ColumnChart
  112. canvasId="test-column"
  113. categories={['A', 'B', 'C']}
  114. series={[
  115. { name: 'Series 1', data: [10, 20, 30] }
  116. ]}
  117. tooltipFormatter={tooltipFormatter}
  118. />
  119. );
  120. const canvas = container.querySelector('canvas');
  121. expect(canvas).toBeInTheDocument();
  122. });
  123. it('应该支持数据标签显示/隐藏', () => {
  124. const { uCharts } = require('../../src/lib/charts/index.ts');
  125. render(
  126. <ColumnChart
  127. canvasId="test-column"
  128. dataLabel={false}
  129. categories={['A', 'B', 'C']}
  130. series={[
  131. { name: 'Series 1', data: [10, 20, 30] }
  132. ]}
  133. />
  134. );
  135. expect(uCharts).toHaveBeenCalledWith(
  136. expect.objectContaining({
  137. dataLabel: false
  138. })
  139. );
  140. });
  141. });