如何模拟“angular.element”

How to mock `angular.element`

本文关键字:angular element 模拟 何模拟      更新时间:2023-09-26

在一个服务中,我有以下代码片段

angular.element('html, body').animate({
        scrollTop: this.parentHeight + ... - ...
    }, 500);

在我的单元测试中,我想检查给animate函数的值是否正确。但是我如何模拟或监视这个animate函数呢?我可以这样想:

beforeEach(() => {
    angular.element = () => {
        return { animate: (options) => { .. }
    }
});

或更好(但不工作)

  spyOn(angular.element('html, body'), 'animate');

有没有更好的(angular的)方法来做到这一点?

可能是这样的?

var element = {
  animate: null,
  parentHeight: 100
};
spyOn(angular, 'element').andReturn(element);
spyOn(element, 'animate');
// Your test code goes here
expect(angular.element).toHaveBeenCalledWith('html, body');
expect(element.animate).toHaveBeenCalledWith(jasmine.objectContaining({
      scrollTop: 100
    }, 500);