如何模拟`angular.element`?

3
在我的服务中,我有以下代码片段:
angular.element('html, body').animate({
        scrollTop: this.parentHeight + ... - ...
    }, 500);

在我的单元测试中,我想检查是否向animate函数提供了正确的值。但是我该如何模拟或监视这个animate函数呢?我可以考虑类似以下的方法:
beforeEach(() => {
    angular.element = () => {
        return { animate: (options) => { .. }
    }
});

更好的方式(但是不起作用)
  spyOn(angular.element('html, body'), 'animate');

有没有更好(angular)的方法来做这件事?
1个回答

4
像这样的东西吗?

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


这个会起作用,但你在这里没有测试任何东西!你要测试自己的模拟(动画)。还有一件事,大多数情况下不需要测试实际参数,比如100和500。 - Ofir Attal
@user2978188 你有其他的测试方法吗?顺便说一下,我认为“实际”参数需要被测试。所有参数都应该被测试。 - FrailWords

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接