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&lt;T&gt;

【问题讨论】:

【参考方案1】:

泛型只存在于编译时而不是运行时。所以不能推导出T的类型。

Get type of generic parameter

【讨论】:

【参考方案2】:

您可以选择使用Type&lt;T&gt; 作为函数的参数:

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&lt;TestComponent&gt;

【讨论】:

以上是关于Angular 单元测试:使用泛型创建组件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Karma Jasmine 的 Angular 1.5 组件模板单元测试

Angular 2 单元测试组件,模拟 ContentChildren

Angular - 组件中订阅功能的单元测试

如何为 angular2 的登录组件编写测试(单元测试)

如何对以 TemplateRef 作为输入的 Angular 组件进行单元测试?

如何在 Angular 组件中模拟服务功能以进行单元测试