Как переопределить функцию внутри ngOnInit в jasmine при создании компонента angular в TestBed? - PullRequest
1 голос
/ 14 января 2020

У меня есть функция ngOnInit, которая вызывает другую функцию внутри того же компонента, и я тестирую этот компонент с помощью теста jasmine.

Я хотел бы посмеяться над функцией, которая находится внутри функции ngOnInit, чтобы предотвратить исходная реализация от выполнения.

  ngOnInit(): void {
    this.initializeData();
  }

Я пробовал следующую реализацию в моей перед каждой функцией, но таким образом ngOninit будет выполняться дважды:

  beforeEach(() => {
    testHostFixture = TestBed.createComponent(TestHostComponent);
    testHostComponent = testHostFixture.componentInstance;
    spyOn(testHostComponent, 'initializeData').and.callFake(()=>{console.log("replacement");});
    testHostComponent.ngOnInit();
    testHostFixture.detectChanges();
  });

Есть ли в любом случае, чтобы высмеивать реализацию Функция 'initializeData' до того, как ngOnInit выполняется в первый раз?

Спасибо.

1 Ответ

3 голосов
/ 14 января 2020

Вам необходимо шпионить до создания компонента. Поэтому просто переместите шпиона над линией создания.

  beforeEach(() => {
    spyOn(testHostComponent, 'initializeData').and.callFake(()=> 
    {console.log("replacement");});
    testHostFixture = TestBed.createComponent(TestHostComponent);
    testHostComponent = testHostFixture.componentInstance;

    testHostComponent.ngOnInit();
    testHostFixture.detectChanges();
  });

Ваш ngOnInit() будет вызван дважды здесь, поскольку компонент запускается ngOnInit(), когда он создается в TestBed. Если вы хотите, чтобы он был вызван только один раз. Удалить явный вызов testHostComponent.ngOnInit();

...