Angular jasmine单元测试框架里expect.toHaveBeenCalled的工作原理
第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 jasmine单元测试框架里expect.toHaveBeenCalled的工作原理相关推荐
- Angular jasmine单元测试框架里describe的实现原理
源代码:describe函数传入的两个参数:描述信息和箭头函数: 从注释能看出,describe函数的语义:Create a group of specs (often called a suite) ...
- Angular jasmine单元测试框架里使用it函数定义single spec
it函数接收两个参数,描述信息和包含了待测试的单元测试代码的函数: /*** Define a single spec. A spec should contain one or more {@lin ...
- Angular jasmine单元测试框架里spyOn的创建原理
准备针对handler的handleError方法创建spy: 保存原始方法的信息到变量originalMetho里: 利用spyFactory.createSpy创建spied版本的新方法: wra ...
- Angular单元测试框架里API toHaveBeenCalledTimes的工作原理
看这样一段代码: let spiedFirstFocusable = spyOn(keyboardFocusService,'findFirstFocusable').and.returnValue( ...
- Angular jasmine单元测试框架TestBed.createComponent的实现原理
单元测试代码里的createComponent,是通过TestBedRender实现的: TestBedRenderer3: 获得注入的TestComponentRenderer: const res ...
- Angular jasmine单元测试框架TestBed.inject的执行原理
单步调试这段代码: TestBed用于单元测试代码里创建Component和service实例. injectionToken即传入TestBed.inject的function: 还是delegat ...
- Angular jasmine单元测试框架spec的运行时数据结构
以我单元测试里这段代码为例: 通过describe函数创建一个suite,即spec的集合: 真正的spec由函数it创建:其中expectable是human readable的字符串描述信息,描述 ...
- Angular jasmine单元测试框架spied method的调用记录数据结构
基于UnknownErrorHandler的handleError方法创建一个spy 方法: 第40行调用的是spied之后的新方法: 因为调用的是Spied之后的wrapper方法,在wrapper ...
- Angular jasmine单元测试框架fixture.detectChanges的实现原理
源代码: fixture的类型是component-fixture,里面会调用_tick方法: 具体执行的detectChange逻辑,取决于Change Detect reference: Root ...
最新文章
- Ubuntu下环境变量设置
- 静态路由中的下一跳地址和送出接口的区别和使用
- Python 下载依赖包环境经常失败超时解决方法
- (转载)浏览器兼容性问题大汇总
- 【转】flannel网络的VXLAN及host-gw
- iloc,ix和loc有何不同?
- EF Core 小工具
- AddType requires at least two arguments, a mime type followed by one or more file extensions
- gSkeletonClu: Revealing Density-Based Clustering Structure from the Core-Connected Tree of a Network
- php aes 256 加解密,PHP完整的AES加解密算法使用及例子(256位)
- 【信息】三方协议签订相关问题及解答
- Self-Supervised Deep Blind Video Super-Resolution
- 【量化策略】横盘策略20211209
- 计算机教师格言座右铭,教师个人格言座右铭集锦
- java查询neo4j_Java中使用neo4j--创建和查询
- 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
- ZZ稻盛和夫:经营为何需要哲学
- 2014.10.17 苹果新品发布会(iPad为主)
- Python装逼指南——五行代码实现批量抠图
- 新北洋SNBC BTP-U81 打印机驱动