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

问题描述 投票:0回答:1

如何在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:imagescreenshot of code-coverage

angular unit-testing jasmine karma-jasmine
1个回答
0
投票

如果代码覆盖率未覆盖if(type),则意味着您的测试总是从以下地址返回:

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

在单元测试中,您应该填写测试数据,使其达到if (type)语句。如果你确保control变量中有适当的数据并且control.value中也有数据,那么就会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.