update at 2026-01-22 18:43:01
This commit is contained in:
60
tests/degreeRing.test.ts
Normal file
60
tests/degreeRing.test.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
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 ');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user