我试图窥探$ timeout,以便我可以验证它没有被调用.具体来说,我的生产代码(见下文)将$ timeout称为函数,而不是对象:
$timeout(function() { ... })
并不是
$timeout.cancel() // for instance
然而,Jasmine需要一个物体被监视,如下所示:
spyOn(someObject, '$timeout')
我不知道'someObject'会是什么.
我正在使用Angular模拟,如果这有任何区别.
编辑:我正在尝试测试的相关生产代码如下所示:
EventHandler.prototype._updateDurationInOneSecondOn = function (call) { var _this = this; var _updateDurationPromise = this._$timeout(function () { call.duration = new Date().getTime() - call.startTime; _this._updateDurationInOneSecondOn(call); }, 1000); // ... more irrelevant code }
在特定的测试场景中,我试图断言永远不会调用$ timeout.
编辑2:明确指出我使用$ timeout作为函数,而不是对象.
陷入同样的问题,并最终用间谍装饰$ timeout服务.
beforeEach(module(function($provide) { $provide.decorator('$timeout', function($delegate) { return sinon.spy($delegate); }); }));
写了更多关于为什么这里有用的信息.