我正在使用Jest测试我的组件。当我运行测试时出错。
下面是我的onClickLogin()代码块
 onClickLogin() {
    if(this.loginForm.valid){
      this.api.getLoginData().subscribe(res=>{
        const user = res.find((a)=>{
          return a.email === this.loginForm.value.email && a.password === this.loginForm.value.password
        });
        if(user){
          this.toastr.success("Login success!!");
          this.loginForm.reset();
          this.router.navigate(['dashboard']);
        } else{
          this.toastr.error("Invalid credentials!");
        }
      }, ()=>{
        this.toastr.error("Something went wrong!!");
      });
    } else{
      this.toastr.error("Please enter all required fields to proceed!");
    }
  }
我还使用Angular Material UI和表单验证,因此我明确禁用了表单验证。
下面是我使用Jest的测试代码块。
it('should navigate to dashboard on clicking login', waitForAsync( () => {
    const button = elLogin.queryAll(By.css('button'));
    loginComponent.loginForm.clearAsyncValidators();
    loginComponent.loginForm.clearValidators();
    loginComponent.loginForm.updateValueAndValidity();
    button[0].nativeElement.click();
    loginFixture.whenStable().then(() => {
      loginFixture.detectChanges();
      expect(location.path()).toBe('/dashboard');
    });
  }));
有什么帮助吗?
我尝试过像这样禁用所有表单验证
loginComponent.loginForm.clearAsyncValidators(); loginComponent.loginForm.clearValidators(); loginComponent.loginForm.updateValueAndValidity();
此外,我还尝试为必填字段设置值
const email = loginComponent.loginForm.controls['email'].setValue("test@gmail.com");
const password = loginComponent.loginForm.controls['password'].setValue("test");
但错误如下
TypeError: Cannot read properties of undefined (reading 'clearAsyncValidators')
 const button = elLogin.queryAll(By.css('button'));
    > 93 |     loginComponent.loginForm.clearAsyncValidators();
         |                              ^
      94 |     loginComponent.loginForm.clearValidators();
      95 |     loginComponent.loginForm.updateValueAndValidity();
      96 |     button[0].nativeElement.click();
有什么帮助吗?谢谢