无法理解为什么这段代码不起作用?
错误是:
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 :(得分:0)
jasmine toHaveBeenCalledWith假设验证是否调用了spyied函数。
所以错误信息是说,你期望应该调用该方法但实际上没有调用它。
我认为您注释掉了代码或测试时没有调用该函数。
expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true);
我认为以上几行正在产生问题。您需要验证滚动是否正常。
答案 1 :(得分:0)
尝试更改
spyOn($window, 'addEventListener')
到
spyOn($window, 'addEventListener').and.callThrough();