Angular jasmine单元测试框架里expect.toHaveBeenCalled的工作原理
2023-09-14 09:04:03 时间
第120行给handler.handleError方法注入spy后,第121行代码flush HTTP Mock request会触发handler.handleError(的wrap实现)调用。第123行代码检测该方法是否真正被调用过。
首先执行expect(handler.handleError), 给handler.handleError创建一个spec:
实际上调用currentRunnable的expect方法:
this指向spec,actual就是被wrap后的方法。使用expectationFactory根据工厂方法创建一个expectation:
执行matcherCompare:
以下这段检查说明,调用toHaveBeenCalled的对象必须是一个spied method:
判断一个方法是否是spy的逻辑也很简单,使用instanceof:
之前spied method被调用之后,在calls数组里插入了一条数据,因此只要calls数组有元素,都认为spied methhod已经被call过了:
更多Jerry的原创文章,尽在:“汪子熙”:
相关文章
- 怎么组织 Angular 项目 |Top 5 技巧
- angular父子组件传值
- Angular: 最佳实践
- SAP 电商云 Spartacus UI Angular UI 和 Accelerator JSP UI 的混合使用
- angular面试问题_kafka面试题
- 如何在Angular项目中使用MQTT
- 关于 Angular HTTP Interceptor 中 Request 和 Response 的 immutable 特性
- 使用 Angular 14 的 inject 函数优化对 Ngrx 的使用方式
- 关于 Angular 应用的入口
- Angular Feature Modules
- Angular 项目路径添加指定的访问前缀
- Angular 项目多国语言设置
- Angular 应用 tsconfig.json 文件里的 typeRoots 属性讲解
- Angular 项目中 angular.json builder 字段的可选项介绍