web-dev-qa-db-fra.com

tester qu'une méthode de composant appelle une autre méthode

Compte tenu de ce composant simple:

import { Component} from '@angular/core';

@Component({
  selector: 'app-component'
})
export class AppComponent {
  foo() {
    this.bar();
  }

  bar() {
    console.log('hello');
  }
}

Comment se fait-il que le test suivant ne valide pas que bar est appelé lorsque j'appelle foo

describe('AppComponent', () => {
  let component: AppComponent;

    beforeEach(() => {
    component = new AppComponent();
  }

  it('should foobar', () => {
    component.foo();
    spyOn(component, 'bar');
    expect(component.bar).toHaveBeenCalled();
  })

}

J'obtiens l'échec du test:

Expected spy bar to have been called.
12
Lev

Vous devez configurer l'espion avant d'appeler la méthode. Jasmine spys wrap fonction pour déterminer quand ils sont appelés et avec quoi ils sont appelés. La méthode doit être encapsulée avant l'appel de la méthode espionnée afin de capturer les informations. Essayez de modifier votre test pour qu'il corresponde aux éléments suivants:

it('should foobar', () => {
    spyOn(component, 'bar');
    component.foo();
    expect(component.bar).toHaveBeenCalled();
})
24
Teddy Sterne