【发布时间】:2018-06-08 22:10:44
【问题描述】:
我正在构建一个应该验证新密码和重复新密码的表单。但是,我在他们的测试中遇到了错误,我无法弄清楚如何解决它们。
首先,我有一个方法来启动所需的表单:
private initForm(): any {
this.form = this.fb.group({
oldPassword': ["", Validators.compose([Validators.required, Validators.minLength(6)])]
})
let newPassword = new FormControl(null, [
Validators.required,
Validators.minLength(6),
this.validNewPassword(this.form)
])
let repeatNewPassword = new FormControl(null, [
Validators.required,
Validators.minLength(6),
this.validPasswordConfirm(this.form)
]);
this.form.addControl('newPassword', newPassword);
this.form.addControl('repeatNewPassword', repeatNewPassword);
}
在这里我声明了应该处理其值的两种方法:
private validNewPassword(form: any): any {
return ((control: FormControl) => {
let newPassword = control.value;
if (newPassword == form.value.oldPassword && newPassword !== form.value.repeatNewPassword) {
return {
newPassword: true
}
}
return null;
})
}
private validPasswordConfirm(form: any): any {
return ((control: FormControl) => {
let repeatPassword = control.value;
if (repeatPassword == form.value.oldPassword && repeatPassword !== form.value.newPassword) {
return {
repeatPassword: true
}
}
return null;
})
}
新密码和重复新密码应与当前密码相同,但仍与当前密码不同才有效。但是当我运行它的测试时,我得到以下结果:
it('should test new password validation', () => {
let errors = {};
let oldPassword = comp.form.controls['oldPassword'];
let newPassword = comp.form.controls['newPassword'];
let repeatNewPassword = comp.form.controls['repeatNewPassword'];
errors = newPassword.errors || {};
expect(newPassword.valid).toBeFalsy();
expect(errors['required']).toBeTruthy();
newPassword.setValue('12345');
errors = newPassword.errors || {};
expect(errors['minlength']).toBeDefined();
// old is equal new
oldPassword.setValue('123456')
newPassword.setValue('123456');
repeatNewPassword.setValue('123455');
errors = repeatNewPassword.errors || {};
expect(errors['newPassword']).toBeTruthy(); // >> Expected undefined to be truthy
// all equal
oldPassword.setValue('123456');
newPassword.setValue('123456');
repeatNewPassword.setValue('123456');
errors = newPassword.errors || {};
expect(errors['newPassword']).toBeTruthy();
// all different
oldPassword.setValue('123123');
newPassword.setValue('123455');
repeatNewPassword.setValue('123456');
errors = newPassword.errors || {};
expect(errors['newPassword']).toBeTruthy(); // >> Expected undefined to be truthy
// valid
oldPassword.setValue('123456');
newPassword.setValue('654321');
repeatNewPassword.setValue('654321');
expect(newPassword.valid).toBeTruthy();
});
it('should test repeat password validation', () => {
let errors = {};
let oldPassword = comp.form.controls['oldPassword'];
let newPassword = comp.form.controls['newPassword'];
let repeatNewPassword = comp.form.controls['repeatNewPassword'];
errors = repeatNewPassword.errors || {};
expect(newPassword.valid).toBeFalsy();
expect(errors['required']).toBeTruthy();
repeatNewPassword.setValue('12345');
errors = repeatNewPassword.errors || {};
expect(errors['minlength']).toBeDefined();
// old is equal repeat
oldPassword.setValue('123456')
newPassword.setValue('123455');
repeatNewPassword.setValue('123456');
errors = repeatNewPassword.errors || {};
expect(errors['repeatPassword']).toBeTruthy();
// all different
oldPassword.setValue('123454')
newPassword.setValue('123455');
repeatNewPassword.setValue('123456');
errors = repeatNewPassword.errors || {};
expect(errors['repeatPassword']).toBeTruthy(); // >> Expected undefined to be truthy
// all equal
oldPassword.setValue('123456');
newPassword.setValue('123456');
repeatNewPassword.setValue('123456');
errors = repeatNewPassword.errors || {};
expect(errors['repeatPassword']).toBeTruthy(); // >> Expected undefined to be truthy
// valid
oldPassword.setValue('123455');
newPassword.setValue('123456');
repeatNewPassword.setValue('123456');
expect(repeatNewPassword.valid).toBeTruthy();
});
如果有人可以帮助我,我将不胜感激。谢谢!
【问题讨论】:
-
访问此链接以获取答案stackoverflow.com/questions/44449673/…
-
谢谢,我将在此处发布我如何解决它作为答案,这是基于您发送的链接@KarnanMuthukumar
-
很高兴为您提供帮助。
标签: ionic3 karma-jasmine angular2-forms