我无法在单元测试中监视 $ interval cancel 。我在我的else语句中进入事件监听器,但似乎缺少其他东西供我的测试通过。
这是完整的功能。我正在测试其他声明
if ($attrs.ngModel != null) {
$scope.$watch($attrs.ngModel, function () {
tail($el);
});
} else {
var interval = $interval(function () {
tail($el);
}, 500, false);
$scope.$on('$destroy', function () {
console.log('inside') /// *** I am reaching this ****
$interval.cancel(interval);
});
}
在我的单元测试中,我将ngModel模拟为null并使用sinon在beforeEach中创建了一个间谍,如此
beforeEach(function() {
sinon.spy($interval, 'cancel');
});
在我的测试中,我确保编译元素,因为 $ interval.cancel 存在于事件监听器上。我正在听$ destroy但这也没有将 emitOccur 改为true。
it("should set emitOccur to true on $destroy", function () {
html = angular.element("<input ha-tail>");
element = $compile(html)($rootScope);
var emitOccur = false;
$rootScope.$on('$destroy', function () {
emitOccur = true;
});
$interval.flush(4000);
$rootScope.$apply();
//expect(emitOccur).to.be.true;
expect($interval.cancel).to.have.been.calledOnce;
});
这个测试似乎需要额外的东西,但我不确定它是什么。