javascript - 如何测试我的 Angular 登录表单是否完全覆盖?无法读取未定义的属性 'subscribe'

标签 javascript angular typescript

我刚刚将我的登录组件更改为更符合 Angular 的预期,但是我现在在此类测试中遇到了失败:

Cannot read property 'subscribe' of undefined

我通过使用 console.log 进行调试时发现的一个问题是,无论我向 onSubmit() 函数传递什么内容,它都会看到不应看到的有效表单。

仅供引用 - 登录表单在实践中确实表现正常且符合预期。只是测试很有趣。

最佳答案

首先要做的事情:

Cannot read property 'subscribe' of undefined

意味着您的服务不会返回 Observable。

解决它

spyOn(mockAuthService, 'login').and.callFake(() => of(null));

由于您的回调没有执行任何操作
(signature : this.authService.login(formUser, formPass).subscribe(() => {),你不需要返回任何东西,所以 null 就可以了.

以下错误可能来自于此,因为您从未进入订阅回调,所以未设置变量。

第二件事:

function setCredentials(user: boolean, pass: boolean) {
    component.loginForm = formBuilder.group({
      username: user ? 'someUser' : '',
      password: pass ? 'somePassword' : ''
    });
  }

您的表单没有验证器!这意味着无论您做什么,它始终有效。

关于javascript - 如何测试我的 Angular 登录表单是否完全覆盖?无法读取未定义的属性 'subscribe',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52476103/

相关文章:

javascript - Typescript 根据条件导出枚举?

javascript - 带有 img 和覆盖的 ng-mouseenter 和 ng-mouseleave 导致它闪烁

javascript - 无法调用 java/coffeescript 中的实例方法

css - Angular 6 动态地将 CSS 类应用于 mat-cell

angular - 如何在计时器触发后正确调用函数进行单元测试。 Angular 7,RXJS 6

javascript - Ionic 2公共(public)变量和内部函数

javascript - 在浏览器中打开新选项卡时出现问题

javascript - 想要从javascript文件调用php文件

javascript - jquery bootstrap 4 typescript 。使用 jquery 关闭模态不工作

typescript - 如何根据文件扩展名而不是内容使 SystemJS 转译 'typescript'