我正在测试一个验证程序,该验证程序将调用服务,如果返回零,它将返回一个错误对象。
我已经为该服务创建了一个带有returnValue的间谍,它似乎可以正常工作,但是我很难执行验证功能并返回值。
我最终要做的是为我正在测试的功能创建一个间谍,我认为我不应该这样做。
验证器功能:
它将服务作为参数并在内部使用
static require(service: Service): ValidatorFn {
return (formGroup: FormGroup): { [key: string]: boolean } | null => {
const checkedCount = state.currentCount();
if (checkedCount === 0) {
return {
'isNotChecked' : true
};
}
return null;
};
}
测试有效: 正如我说的那样,我真的不认为我应该监视正在测试的功能吗?
it('should return error object when currentCount === 0', () => {
spyOn(service, 'currentCount').and.returnValue(0);
spyOn(ModValidation, 'require').and.returnValue({ 'isNotChecked' : true });
service.currenCount();
expect(ModValidation.require(service)).toEqual({ 'isNotChecked' : true });
});
我尝试过但不起作用的是:
it('should return error object when currentCount === 0', () => {
spyOn(service, 'currentCount').and.returnValue(0);
const resp = ModValidation.require(service);
service.currentCount();
expect(resp).toEqual({ 'isNotChecked' : true });
});
我明白了
Expected Function to equal Object({ isNotChecked: true }).
答案 0 :(得分:1)
问题是,验证器中的require方法是一个将AbstractControl转换为验证结果的函数。
所以你想打电话的是这样的:
it('currentCount 0', () => {
const service = {currentCount: () => {}};
spyOn(service, 'currentCount').and.returnValue(0);
expect(CustomValidators.require(service)({} as any)).toEqual({
'isNotChecked' : true
});
});
我为您进行了一次Stackblitz检查:stackblitz