如何模拟`angular.element`

How to mock `angular.element`

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

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