Dans la configuration de mon composant angulaire I ont une fonction:fonction spyOn pas appelée Jasmine angulaire 2
populateForm(id:String, index:number){
let blogs = this.blogsService.returnBlogs()
blogs.map((blog:Blog)=>{
blog._id === id ? this.blogsService.populateForm.next({blog:blog, index:index}) : blog._id = blog._id;
})
}
J'ai mis en place un test en termes d'un bouton clic, qui appelle la fonction populateForm qui appelle une fonction returnBlogs, à partir d'un service qui, me donne un tableau à manipuler.
Mais je ne parviens pas à espionner la fonction returnBlogs:
it('Should be able to click element and call PopulateForm function with correct parameters',() => {
let blogs = [{_id1: 'xyz', title: 'title1', vidUrl: 'XpiipWULkXk'}, {_id1: 'abc', title: 'title2', vidUrl: 'XpiipWULkXk'}]
blogsService = TestBed.get(BlogsService)
component.blogs = blogsTest
fixture.detectChanges();
let spy = spyOn(blogsService, 'returnBlogs').and.returnValue(blogs);
let domEl = fixture.nativeElement.querySelector('.blog-thumb');
domEl.click();
expect(component.populateForm).toHaveBeenCalledWith('xyz', 1);
expect(spy).toHaveBeenCalled();
});
Je reçois une erreur:
Expected spy returnBlogs to have been called.
Les pointeurs seraient appréciés, je suis en train de se rendre à prises avec ce qui devrait et ne devrait pas être testé aussi
Je crois que 'TestBed.get' va vous créer une nouvelle instance du service, pas celle du composant. Au lieu de cela, créez 'const serviceSpy = jasmine.createSpyObj ('BlogService', ['returnBlogs'])' et utilisez l'injecteur pour '{provide: BlogsService, useValue: serviceSpy}'. – jonrsharpe