2017-10-04 84 views
0

在我的角度分量設置spyOn功能我有一個函數:不會被調用茉莉花角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; 

    }) 
    } 

我已經建立了一個測試,點擊一個按鈕而言,調用populateForm功能,從一個服務中調用一個returnBlogs函數,該函數爲我提供了一個操作數組。

但我有麻煩刺探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(); 
    }); 

我得到一個錯誤:

Expected spy returnBlogs to have been called.

任何指針將不勝感激,我試圖去與什麼應該和不應該被測試

+0

我相信'TestBed.get'會爲您創建一個新的服務實例,而不是組件所具有的一個實例。相反,創建'const serviceSpy = jasmine.createSpyObj('BlogService',['returnBlogs']);'並使用注入器來提供'{provide:BlogsService,useValue:serviceSpy}'。 – jonrsharpe

回答

0

我已經得到它與下面的工作:

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

通過設置間諜後顯式調用blogsService.returnBlogs()。

當它被記錄時,它返回我在腳本頂部設置的博客數組。

但我認爲:

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

調用該函數,這是處理這種事情的正確方法?