Угловое модульное тестирование: использование обобщенных элементов для создания компонента - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать универсальную оболочку вокруг TestBed.createComponent, которая принимает аргумент типа и создает компонент для этого типа.Однако функция TestBed.createComponent принимает аргумент типа Type<T>.Я не могу создать Type<T> из переданного общего аргумента 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> из переданного типа?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Одна из ваших возможностей - использовать 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>.

0 голосов
/ 09 мая 2019

Обобщения существуют только во время компиляции, а не во время выполнения.Таким образом, вы не можете получить тип T.

Получить тип универсального параметра

...