如何模拟`angular.element`

时间:2015-10-15 14:48:31

标签: javascript angularjs unit-testing jasmine mocking

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

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

在我的单元测试中,我想检查animate函数是否给出了正确的值。但是,我如何模拟或监视这个animate函数?我能想到这样的事情:

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

或更好(但不工作)

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

有更好的(有棱角的)方法吗?

1 个答案:

答案 0 :(得分:3)

这样的事可能吗?



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