javascript - 无法使用 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)
解决方案
在@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()
.
推荐阅读
- php - php嵌套数组返回未定义的索引
- python - InfluxDB - 在 Grafana 上工作但不在 Python 中的查询
- html - 如何通过 html 将字符串发送到控制器。ASP.NET MVC
- xml - 用于 XML API 使用的 Laravel 包
- class - 如何从活动中调用非活动类中的方法
- jquery - 在 dynatable 中创建带有预定义查询的按钮菜单
- java - Recyclerview 适配器无法正常工作
- performance - 在 go (golang) 中每天触发一次滴答声 - 不是通过轮询
- java - 如何创建支持深度复制的深度嵌套数据模型?
- c++ - 您可以在变量声明/初始化中使用多个 std::tie 而不重复 std::tie 吗?