Angular 单元测试:使用泛型创建组件
Posted
技术标签:
【中文标题】Angular 单元测试:使用泛型创建组件【英文标题】:Angular Unit Testing: Using Generics to Create Component 【发布时间】:2019-09-27 11:42:51 【问题描述】:我正在尝试围绕TestBed.createComponent
创建一个通用包装器,它接受一个类型参数并为该类型创建组件。但是,TestBed.createComponent
函数采用Type<T>
类型的参数。我无法从传入的通用 T 参数创建Type<T>
。
export function createTestHarness<T>(): TestHarness<T>
let component: T;
let fixture: ComponentFixture<T>;
fixture = TestBed.createComponent<T>(**PROBLEM AREA**);
component = fixture.componentInstance;
fixture.detectChanges();
return new TestHarness<T>(component, fixture);
有没有办法从传入的类型派生Type<T>
?
【问题讨论】:
【参考方案1】:泛型只存在于编译时而不是运行时。所以不能推导出T的类型。
Get type of generic parameter
【讨论】:
【参考方案2】:您可以选择使用Type<T>
作为函数的参数:
function createTestHarness<T>(type: Type<T>): TestHarness<T>
let component: T;
let fixture: ComponentFixture<T>;
fixture = TestBed.createComponent<T>(type);
component = fixture.componentInstance;
fixture.detectChanges();
return new TestHarness<T>(component, fixture);
有以下用法:
const harness = createTestHarness(TestComponent);
这将返回TestHarness<TestComponent>
。
【讨论】:
以上是关于Angular 单元测试:使用泛型创建组件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Karma Jasmine 的 Angular 1.5 组件模板单元测试
Angular 2 单元测试组件,模拟 ContentChildren