2017-09-14 107 views
0

不明白为什么这段代码不起作用?

错误是:

Expected spy addEventListener to have been called with [ 'scroll', <jasmine.any(Function)>, true ] but it was never called. 

describe('sessionActivity.spec',() => { 
    beforeEach(module('sessionActivity')); 

    it('should subscribe', inject(($window, sessionActivity) => { 
     spyOn($window, 'addEventListener'); 

     sessionActivity.subscribe(); 
     //$window.addEventListener('scroll',() => {}, true); 
     //$window.addEventListener('click',() => {}, true); 
     expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true); 
     expect($window.addEventListener).toHaveBeenCalledWith('click', jasmine.any(Function), true); 
    })); 
}); 

在sessionActivity.subscribe里面我创建了两个事件监听器。

而且如果我用//$window.addEventListener取消注释两行,则所有测试都是通过。

我应该在这里改变什么?

编辑:

的问题是,我的快捷里面sessionActivity.subscribe():

const { addEventListener, removeEventListener } = $window; 
addEventListener('scroll', trackActivityWithDebounce, true); 
addEventListener('click', trackActivityWithDebounce, true); 

有人能解释一下吗?

+0

请提供所有相关的代码。 addEventListener被调用的地方在哪里?请参阅http://stackoverflow.com/help/mcve – estus

回答

0

茉莉花toHaveBeenCalledWith假设验证spyied函数被调用。

所以错误信息是说,你期待应该调用的方法,但实际上并没有调用它。

我想你已经注释掉了代码,或者当测试那个函数没有被调用。

expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true); 

我觉得上面的代码产生了这个问题。您需要验证滚动是否正常。

0

尝试改变

spyOn($window, 'addEventListener') 

spyOn($window, 'addEventListener').and.callThrough();