如何访问type
函数中的validate
变量?问题是code-covarage
显示type
语句中的if
没有覆盖,我不知道该如何覆盖。
interface NotUnique {
notUnique: boolean;
}
@Injectable()
export class CheckExists implements AsyncValidator {
constructor(
private http: HttpClient
) {}
async validate(control: FormControl): Promise<NotUnique> {
try {
if (!control || !control.parent) {
return;
}
const value: string = control.value;
const type = value.includes('@') ? 'email' : 'username';
if (type) {
const res = await this.http.post('/users/exists', {field: type, value: value}).toPromise();
if (!(res as ExistsResponse).exists) {
return null;
}
return { notUnique: true };
}
} catch (err) {
return null;
}
}
}
答案 0 :(得分:0)
如果代码覆盖率未涵盖if(type)
,则意味着您的测试始终从以下位置返回:
if (!control || !control.parent) {
return;
}
在单元测试中,应以直到if (type)
语句为止的方式填充测试数据。如果您确保control
变量中包含正确的数据,并且也包含control.value
中的数据,则会发生这种情况。