间谍/测试是否取消$ interval

时间:2016-04-12 16:25:57

标签: javascript angularjs unit-testing

我无法在单元测试中监视 $ 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;
    });

这个测试似乎需要额外的东西,但我不确定它是什么。

0 个答案:

没有答案