角茉莉spyOn($ window,'addEventListener');不工作
问题描述:
不明白为什么这段代码不起作用?
错误是:
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);
有人能解释一下吗?
答
茉莉花toHaveBeenCalledWith假设验证spyied函数被调用。
所以错误信息是说,你期待应该调用的方法,但实际上并没有调用它。
我想你已经注释掉了代码,或者当测试那个函数没有被调用。
expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true);
我觉得上面的代码产生了这个问题。您需要验证滚动是否正常。
答
尝试改变
spyOn($window, 'addEventListener')
到
spyOn($window, 'addEventListener').and.callThrough();
请提供所有相关的代码。 addEventListener被调用的地方在哪里?请参阅http://*.com/help/mcve – estus