验证器如下:
import { AbstractControl } from "@angular/forms";
export function ValidateInt(control: AbstractControl): { [key: string]: boolean } | null {
function countPlaces(value) {
var text = value.toString();
var index = text.indexOf(".");
return index == -1 ? 0 : (text.length - index - 1);
}
function checkNumeric(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
let controlValue = control.value.toString();
let trailingDec = controlValue.indexOf('.') == -1 ;
let decimalCount = countPlaces(control.value) ;
let isNumeric = checkNumeric(control.value) ;
if(isNumeric == false ){
return { 'int': true };
}else if(trailingDec == false){
return { 'int': true };
}else{ return null}
}
测试文件如下:
import * as intValid from './intValidator.validator' ;
import { AbstractControl, FormControl, Validators} from "@angular/forms";
describe('validate int', () => {
var intControl : AbstractControl = new FormControl('', Validators.required);
intControl.setValue(23) ;
fit('returns true', () => {
let actual = intValid.ValidateInt(intControl);
expect(actual).toEqual(null);
});
});
describe('validate int', () => {
var intControl : AbstractControl = new FormControl('', Validators.required);
intControl.setValue(23.) ;
let badReturn = { 'int': true};
fit('returns false', () => {
let actual = intValid.ValidateInt(intControl);
expect(actual).toEqual(badReturn);
});
});
错误是:
validate int returns false FAILED
Error: Expected null to equal Object({ int: true }).
我无法终生弄清楚测试失败的原因,当我在解决方案运行时按照调试器中带有断点的控制流程进行操作时,将返回带有“ INVALID”的正确控制。
答案 0 :(得分:0)
原来是这个问题:
intControl.setValue(23.) ;
更改为:
intControl.setValue('23.') ;
允许测试通过。...天哪!输入问题