首页 > 解决方案 > 无法使用 Angular2+ 成功测试我的 NgForm 调用

问题描述

我正在尝试通过 NgForm 发送用户名和密码输入来测试我是否可以成功登录,但我似乎无法成功通过......我错过了什么吗?

我目前收到错误:

Chrome 67.0.3396 (Mac OS X 10.13.5) LoginComponent should call auth.login when passed a valid form with correct credentials onSubmit FAILED
    Expected spy login to have been called.
        at UserContext.<anonymous> src/app/components/login/login.component.spec.ts:87:26)
        at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke node_modules/zone.js/dist/zone.js:388:1)
        at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke node_modules/zone.js/dist/zone-testing.js:288:1)
        at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke node_modules/zone.js/dist/zone.js:387:1)

标签: javascriptangulartypescriptangularjs-ng-form

解决方案


在@trichetriche 的大力帮助下,我遇到的解决方案是需要对我的spyOn.

我还需要将valid: true选项添加到要传递的 NgForm json 中:

const validFormGoodCreds = <NgForm>{
    valid: true,
    value: {
      username: "someUsername",
      password: "somePassword"
    }
  };

由于我不关心当前返回的内容,只想关注函数是否被调用,所以我选择了换行的解决方案:

authLoginSpy = spyOn(component['authService'], 'login');

authLoginSpy = spyOn(component['authService'], 'login').and.callThrough();

然后可以看到该函数应该完全运行,因此将调用login().


推荐阅读