J'ai créé un fichier testing (spec) pour un composant que je teste. Mais quand je lance le test, cela me donne une erreur disant
Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
at ComponentUndertest.ngOnInit
ce qui est évident car j'ai souscrit à quelque chose dans ma méthode ngOnInit (), mais puis-je ignorer l'abonnement pendant le test? Ou puis-je simuler un abonnement pendant les tests? J'ai beaucoup cherché sur ce problème sur Google, mais je n'ai rien trouvé en rapport avec les tests angular2. Merci d'avance.
En supposant que vous avez un service qui a une méthode qui retourne un observable, disons
class SomeService {
getData(): Observable<Data> {}
}
Créez spy1 où vous retournez un objet avec une fonction d'abonnement noop.
let mockSomeService = {
getData: () => {}
}
TestBed.configureTestingModule({
providers: [
{ provide: SomeService, useValue: mockSomeService }
]
})
it('...', () => {
spyOn(mockSomeService, 'getData').and.returnValue({ subscribe: () => {} })
// do stuff
expect(mockSomService.getData).toHaveBeenCalled();
})
Retourne un réel observable dans l'espion
spyOn(mockSomeService, 'getData').and.returnValue(Observable.of(someData))
Peut-être que cela sera préféré à la méthode d'abonnement noop, car si l'appel sur le service change quelque chose dans le composant, c'est quelque chose que vous voudrez probablement tester
Faites quelque chose comme dans ce post . C'est personnellement qu'ils étaient je vais d'habitude. C'est juste une question de préférence.