import { describe, expect, it, vi } from 'vitest' import { i18n } from '../../../i18n' import { validatorRule, validators } from '../../../script/validators' describe('validators', () => { const runValidator = (validator: Function, value: any) => { const callback = vi.fn() validator({}, value, callback) return callback } it('notSpecialCharacter 在空值、特殊字符和正常值时返回对应结果', () => { const validator = validators.notSpecialCharacter[0].validator const emptyCallback = runValidator(validator, '') expect(emptyCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotBeEmpty') as string)) const specialCallback = runValidator(validator, 'tom@') expect(specialCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotContainSpecialCharacters') as string)) const successCallback = runValidator(validator, '中文Tom123') expect(successCallback).toHaveBeenCalledWith() }) it('containNumStr 在空值、特殊字符/中文和正常值时返回对应结果', () => { const validator = validators.containNumStr[0].validator const emptyCallback = runValidator(validator, '') expect(emptyCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotBeEmpty') as string)) const invalidCallback = runValidator(validator, '中文abc') expect(invalidCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotContainSpecialCharactersAndChinese') as string)) const successCallback = runValidator(validator, 'abc123') expect(successCallback).toHaveBeenCalledWith() }) it('phone、email、required、requiredInput 暴露正确的静态规则', () => { expect(validators.phone).toEqual([ { required: true, message: i18n.global.t('pleaseInputCorrectPhoneNumber'), trigger: 'blur', pattern: /^1[345789]\d{9}$/ } ]) expect(validators.email).toEqual([ { required: true, message: i18n.global.t('cannotBeEmpty'), trigger: 'blur' }, { type: 'email', message: i18n.global.t('pleaseInputCorrectEmail'), trigger: 'blur' } ]) expect(validators.required).toEqual([ { required: true, message: i18n.global.t('pleaseSelect'), trigger: 'change' } ]) expect(validators.requiredInput).toEqual([ { required: true, message: i18n.global.t('pleaseInput'), trigger: 'blur' } ]) }) }) describe('validatorRule', () => { const runValidator = (validator: Function, value: any) => { const callback = vi.fn() validator({}, value, callback) return callback } it('requiredSelect、requiredInput、CN、phone、IP、email、url 暴露正确规则', () => { expect(validatorRule.requiredSelect).toEqual({ required: true, message: i18n.global.t('pleaseSelect'), trigger: 'change' }) expect(validatorRule.requiredInput).toEqual({ required: true, message: i18n.global.t('pleaseInput'), trigger: 'blur' }) expect(validatorRule.CN).toEqual({ pattern: /^[\u4e00-\u9fa5]+$/, message: i18n.global.t('pleaseInputCN'), trigger: 'blur' }) expect(validatorRule.phone).toEqual({ message: i18n.global.t('pleaseInputCorrectPhoneNumber'), trigger: 'blur', pattern: /^1[345789]\d{9}$/ }) expect(validatorRule.IP).toEqual({ message: i18n.global.t('pleaseInputCorrectIP'), trigger: 'blur', pattern: /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ }) expect(validatorRule.email).toEqual({ type: 'email', message: i18n.global.t('pleaseInputCorrectEmail'), trigger: 'blur' }) expect(validatorRule.url).toEqual({ type: 'url', message: i18n.global.t('pleaseInputCorrectURL'), trigger: 'blur' }) }) it('noSpecial 在空值、特殊字符和正常值时返回对应结果', () => { const validator = validatorRule.noSpecial.validator const emptyCallback = runValidator(validator, '') expect(emptyCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotBeEmpty') as string)) const invalidCallback = runValidator(validator, 'abc#') expect(invalidCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotContainSpecialCharacters') as string)) const successCallback = runValidator(validator, 'abc中文123') expect(successCallback).toHaveBeenCalledWith() }) it('noCN 在空值、中文和正常值时返回对应结果', () => { const validator = validatorRule.noCN.validator const emptyCallback = runValidator(validator, '') expect(emptyCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotBeEmpty') as string)) const invalidCallback = runValidator(validator, '测试abc') expect(invalidCallback).toHaveBeenCalledWith(new Error(i18n.global.t('cannotContainCN') as string)) const successCallback = runValidator(validator, 'abc_123') expect(successCallback).toHaveBeenCalledWith() }) })