Angular jasmine单元测试框架TestBed.createComponent的实现原理

141 阅读1分钟

单元测试代码里的createComponent,是通过TestBedRender实现的:

TestBedRenderer3:

获得注入的TestComponentRenderer:

const result = this.testModuleRef.injector.get(token, UNDEFINED, flags);

得到DomTestComponentRenderer:

一个硬编码的rootElementId:root0

创建一个template元素,里面包含一个div元素,id为root0:

type就是createComponent的输入参数:

type as any之后,其ɵcmp属性里包含了很多信息,简而言之,就是Component的定义,也就是metadata:

使用ComponentDefinition创建ComponentFactory:

在ngZone里运行initComponent,并将结果插入到activeFixtures里,并返回fixture:

更多Jerry的原创文章,尽在:“汪子熙”: