如何在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;
}
}
}
如果代码覆盖率未覆盖if(type)
,则意味着您的测试总是从以下地址返回:
if (!control || !control.parent) {
return;
}
在单元测试中,您应该填写测试数据,使其达到if (type)
语句。如果你确保control
变量中有适当的数据并且control.value
中也有数据,那么就会发生这种情况。