Files
lupin-demo/tests/degreeRing.test.ts
2026-01-22 18:43:01 +08:00

61 lines
1.9 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { buildDegreeRing } from '../src/degreeRing';
import type { DegreeRingConfig } from '../src/types';
describe('degreeRing', () => {
const baseConfig: DegreeRingConfig = {
rInner: 90,
rOuter: 100,
showDegree: 1,
mode: 'both',
opacity: 0.3,
tickLength: 6,
tickLengthStep: 1,
majorTick: 10,
minorTick: 5,
microTick: 1,
tickColor: '#ffffff',
ringColor: '#ffffff',
};
it('应生成主/次/微刻度并支持 both 模式', () => {
const data = buildDegreeRing(baseConfig);
const angle0 = data.ticks.filter((tick) => tick.angle === 0);
expect(angle0).toHaveLength(2);
expect(angle0[0].length).toBe(6);
expect(angle0[1].length).toBe(6);
});
it('应按 majorTick 生成度数标签', () => {
const data = buildDegreeRing(baseConfig);
expect(data.labels?.length).toBe(36);
expect(data.labels?.[0].text).toBe('0');
expect(data.labels?.[1].text).toBe('10');
});
it('inner 模式应从 rInner 向外绘制', () => {
const data = buildDegreeRing({ ...baseConfig, mode: 'inner' });
const tick = data.ticks[0];
expect(tick.startR).toBe(baseConfig.rInner);
expect(tick.endR).toBe(baseConfig.rInner + tick.length);
});
it('tickLengthStep 应影响次/微刻度长度', () => {
const data = buildDegreeRing({ ...baseConfig, tickLength: 6, tickLengthStep: 2 });
const major = data.ticks.find((tick) => tick.angle === 0);
const minor = data.ticks.find((tick) => tick.angle === 5 && tick.type === 'minor');
const micro = data.ticks.find((tick) => tick.angle === 1 && tick.type === 'micro');
expect(major?.length).toBe(6);
expect(minor?.length).toBe(4);
expect(micro?.length).toBe(2);
});
it('度数标签应生成 textPath', () => {
const data = buildDegreeRing(baseConfig);
const label = data.labels?.[0];
expect(label?.textPath).toContain('M ');
});
});