refactor(代码重复): 抽取共享工具函数与 UI 组件,消除多处重复实现
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { randomInt, randomPick } from '@/lib/generators/random';
|
||||
|
||||
describe('generators/random', () => {
|
||||
it('randomInt 应返回闭区间内的整数', () => {
|
||||
vi.spyOn(Math, 'random').mockReturnValue(0.5);
|
||||
|
||||
expect(randomInt(1, 10)).toBe(6);
|
||||
expect(randomInt(5, 5)).toBe(5);
|
||||
});
|
||||
|
||||
it('randomPick 应对单元素数组返回该元素', () => {
|
||||
vi.spyOn(Math, 'random').mockReturnValue(0);
|
||||
|
||||
expect(randomPick(['only'])).toBe('only');
|
||||
});
|
||||
|
||||
it('randomPick 应返回数组中的元素', () => {
|
||||
vi.spyOn(Math, 'random').mockReturnValue(0.99);
|
||||
|
||||
expect(randomPick(['a', 'b', 'c'])).toBe('c');
|
||||
});
|
||||
});
|
||||
@@ -4,20 +4,7 @@
|
||||
*/
|
||||
|
||||
import type { GeneratorDefinition } from '@/types/testDataGenerator';
|
||||
|
||||
/**
|
||||
* 生成随机整数
|
||||
*/
|
||||
function randomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从数组中随机选择
|
||||
*/
|
||||
function randomPick<T>(arr: T[]): T {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
import { randomInt, randomPick } from './random';
|
||||
|
||||
/**
|
||||
* 随机整数生成器
|
||||
|
||||
@@ -4,20 +4,7 @@
|
||||
*/
|
||||
|
||||
import type { GeneratorDefinition } from '@/types/testDataGenerator';
|
||||
|
||||
/**
|
||||
* 生成随机整数
|
||||
*/
|
||||
function randomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从数组中随机选择
|
||||
*/
|
||||
function randomPick<T>(arr: T[]): T {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
import { randomInt, randomPick } from './random';
|
||||
|
||||
/**
|
||||
* 格式化日期
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
import type { GeneratorDefinition } from '@/types/testDataGenerator';
|
||||
import { randomInt, randomPick } from './random';
|
||||
|
||||
// 中文姓氏
|
||||
const SURNAMES = [
|
||||
@@ -162,20 +163,6 @@ const CITIES: Record<string, string[]> = {
|
||||
四川省: ['成都市', '绵阳市', '德阳市', '宜宾市'],
|
||||
};
|
||||
|
||||
/**
|
||||
* 生成随机整数
|
||||
*/
|
||||
function randomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从数组中随机选择
|
||||
*/
|
||||
function randomPick<T>(arr: T[]): T {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
|
||||
/**
|
||||
* 中文姓名生成器
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export function randomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
export function randomPick<T>(arr: readonly T[]): T {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
@@ -4,20 +4,7 @@
|
||||
*/
|
||||
|
||||
import type { GeneratorDefinition } from '@/types/testDataGenerator';
|
||||
|
||||
/**
|
||||
* 生成随机整数
|
||||
*/
|
||||
function randomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从数组中随机选择
|
||||
*/
|
||||
function randomPick<T>(arr: T[]): T {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
import { randomInt, randomPick } from './random';
|
||||
|
||||
/**
|
||||
* UUID 生成器
|
||||
|
||||
Reference in New Issue
Block a user