更新完善页面
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
const { sanitizeInt, sanitizeFloat, sanitizeString } = require('../utils/validators')
|
||||
|
||||
describe('sanitizeInt', () => {
|
||||
it('应返回有效的整数', () => {
|
||||
expect(sanitizeInt(42)).toBe(42)
|
||||
expect(sanitizeInt('42')).toBe(42)
|
||||
expect(sanitizeInt(0)).toBe(0)
|
||||
expect(sanitizeInt(-5)).toBe(-5)
|
||||
})
|
||||
|
||||
it('应在输入为 null/undefined/空字符串时返回 fallback', () => {
|
||||
expect(sanitizeInt(null, 0)).toBe(0)
|
||||
expect(sanitizeInt(undefined, 10)).toBe(10)
|
||||
expect(sanitizeInt('', 99)).toBe(99)
|
||||
})
|
||||
|
||||
it('应在输入为 null/undefined/空字符串且无 fallback 时返回 undefined', () => {
|
||||
expect(sanitizeInt(null)).toBeUndefined()
|
||||
expect(sanitizeInt(undefined)).toBeUndefined()
|
||||
expect(sanitizeInt('')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('应在无法解析为整数时返回 null', () => {
|
||||
expect(sanitizeInt('abc')).toBeNull()
|
||||
expect(sanitizeInt('12.5')).toBe(12) // parseInt 截断小数
|
||||
expect(sanitizeInt({})).toBeNull()
|
||||
expect(sanitizeInt(NaN)).toBeNull()
|
||||
})
|
||||
|
||||
it('应在值小于 min 时返回 null', () => {
|
||||
expect(sanitizeInt(3, undefined, 5)).toBeNull()
|
||||
expect(sanitizeInt(5, undefined, 5)).toBe(5)
|
||||
expect(sanitizeInt(6, undefined, 5)).toBe(6)
|
||||
})
|
||||
|
||||
it('应在值大于 max 时返回 null', () => {
|
||||
expect(sanitizeInt(11, undefined, undefined, 10)).toBeNull()
|
||||
expect(sanitizeInt(10, undefined, undefined, 10)).toBe(10)
|
||||
expect(sanitizeInt(9, undefined, undefined, 10)).toBe(9)
|
||||
})
|
||||
|
||||
it('应同时检查 min 和 max', () => {
|
||||
expect(sanitizeInt(5, undefined, 1, 10)).toBe(5)
|
||||
expect(sanitizeInt(0, undefined, 1, 10)).toBeNull()
|
||||
expect(sanitizeInt(11, undefined, 1, 10)).toBeNull()
|
||||
})
|
||||
|
||||
it('应处理字符串形式的数字', () => {
|
||||
expect(sanitizeInt('100')).toBe(100)
|
||||
expect(sanitizeInt(' 50 ')).toBe(50)
|
||||
})
|
||||
})
|
||||
|
||||
describe('sanitizeFloat', () => {
|
||||
it('应返回有效的浮点数', () => {
|
||||
expect(sanitizeFloat(3.14)).toBeCloseTo(3.14)
|
||||
expect(sanitizeFloat('2.5')).toBeCloseTo(2.5)
|
||||
expect(sanitizeFloat(0)).toBe(0)
|
||||
expect(sanitizeFloat(-1.5)).toBeCloseTo(-1.5)
|
||||
})
|
||||
|
||||
it('应在输入为 null/undefined/空字符串时返回 fallback', () => {
|
||||
expect(sanitizeFloat(null, 1.0)).toBeCloseTo(1.0)
|
||||
expect(sanitizeFloat(undefined, 2.5)).toBeCloseTo(2.5)
|
||||
expect(sanitizeFloat('', 0.0)).toBeCloseTo(0.0)
|
||||
})
|
||||
|
||||
it('应在输入为 null/undefined/空字符串且无 fallback 时返回 undefined', () => {
|
||||
expect(sanitizeFloat(null)).toBeUndefined()
|
||||
expect(sanitizeFloat(undefined)).toBeUndefined()
|
||||
expect(sanitizeFloat('')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('应在无法解析为浮点数时返回 null', () => {
|
||||
expect(sanitizeFloat('abc')).toBeNull()
|
||||
expect(sanitizeFloat({})).toBeNull()
|
||||
expect(sanitizeFloat(NaN)).toBeNull()
|
||||
})
|
||||
|
||||
it('应在值小于 min 时返回 null', () => {
|
||||
expect(sanitizeFloat(0.5, undefined, 1.0)).toBeNull()
|
||||
expect(sanitizeFloat(1.0, undefined, 1.0)).toBeCloseTo(1.0)
|
||||
})
|
||||
|
||||
it('应在值大于 max 时返回 null', () => {
|
||||
expect(sanitizeFloat(11.0, undefined, undefined, 10.0)).toBeNull()
|
||||
expect(sanitizeFloat(10.0, undefined, undefined, 10.0)).toBeCloseTo(10.0)
|
||||
})
|
||||
|
||||
it('应同时检查 min 和 max', () => {
|
||||
expect(sanitizeFloat(5.5, undefined, 1.0, 10.0)).toBeCloseTo(5.5)
|
||||
expect(sanitizeFloat(0.5, undefined, 1.0, 10.0)).toBeNull()
|
||||
expect(sanitizeFloat(10.5, undefined, 1.0, 10.0)).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
describe('sanitizeString', () => {
|
||||
it('应返回有效的字符串', () => {
|
||||
expect(sanitizeString('hello')).toBe('hello')
|
||||
expect(sanitizeString('你好世界')).toBe('你好世界')
|
||||
})
|
||||
|
||||
it('应在输入为 null/undefined 时返回空字符串', () => {
|
||||
expect(sanitizeString(null)).toBe('')
|
||||
expect(sanitizeString(undefined)).toBe('')
|
||||
})
|
||||
|
||||
it('应将非字符串类型转为字符串', () => {
|
||||
expect(sanitizeString(123)).toBe('123')
|
||||
expect(sanitizeString(true)).toBe('true')
|
||||
})
|
||||
|
||||
it('应截断超过最大长度的字符串', () => {
|
||||
const longStr = 'a'.repeat(300)
|
||||
expect(sanitizeString(longStr).length).toBe(255)
|
||||
expect(sanitizeString(longStr)).toBe('a'.repeat(255))
|
||||
})
|
||||
|
||||
it('应使用自定义最大长度', () => {
|
||||
const str = 'abcdefghij'
|
||||
expect(sanitizeString(str, 5)).toBe('abcde')
|
||||
expect(sanitizeString(str, 20)).toBe('abcdefghij')
|
||||
})
|
||||
|
||||
it('应不截断等于最大长度的字符串', () => {
|
||||
const str = 'a'.repeat(255)
|
||||
expect(sanitizeString(str)).toBe(str)
|
||||
})
|
||||
|
||||
it('应处理空字符串', () => {
|
||||
expect(sanitizeString('')).toBe('')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user