2017-10-04 2 views
0

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

+0

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

Répondre

0

J'ai eu ce travail avec le ci-dessous:

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); 

     blogsService.returnBlogs() 
     console.log(blogsService.returnBlogs()) 
     expect(blogsService.returnBlogs).toHaveBeenCalled(); 
    }); 

En appelant explicitement blogsService.returnBlogs() après avoir configuré l'espion. Lorsqu'il est enregistré, il renvoie le tableau de blog que j'ai configuré en haut du script.

Mais je pensais:

spyOn(blogsService, 'returnBlogs').and.returnValue(blogs) 

appelle la fonction, est-ce la bonne façon de gérer ce genre de chose?