使用Jasmine在Angular单元测试中访问方法的局部变量

时间:2019-02-15 13:04:41

标签: angular unit-testing jasmine karma-jasmine

如何访问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;
        }
    }
}

upd:图片screenshot of code-coverage

1 个答案:

答案 0 :(得分:0)

如果代码覆盖率未涵盖if(type),则意味着您的测试始终从以下位置返回:

if (!control || !control.parent) {
   return;
}

在单元测试中,应以直到if (type)语句为止的方式填充测试数据。如果您确保control变量中包含正确的数据,并且也包含control.value中的数据,则会发生这种情况。