测试$ timeout仅被调用一次

时间:2016-05-15 23:41:23

标签: javascript angularjs unit-testing jasmine timeout

我有以下控制器:

angular.module('myapp').controller('MyCtrl', function ($timeout) {
    var self = this;

    var currentNumber = 0;
    var isBusy = false;

    self.items = [];
    self.loadMore = function () {
        if (isBusy) {
            return;
        }

        isBusy = true;

        $timeout(function () {
            for (var i = 0; i < 10; i++) {
                self.items.push(currentNumber);
                currentNumber++;
            }

            isBusy = false;
        }, 1000);
    };
});

它公开了loadMore方法,该方法在一秒钟后将元素添加到items。在此期间,标记isBusy设置为true,因此如果您在loadMore为真时调用isBusy,则不会发生任何其他情况。

我想测试即使我拨打loadMore两次,$timeout也会被调用一次。

这是茉莉花测试:

describe('MyCtrl', function () {
    var ctrl,
        timeout;

    beforeEach(module('myapp'));
    beforeEach(inject(function ($controller, $timeout) {
        timeout = $timeout;
        ctrl = $controller('SelectionCtrl', {$timeout: timeout});
    }));

    it('$timeout should be called once when calling loadMore multiple times', function () {
        ctrl.loadMore();
        ctrl.loadMore();

        // TODO verify that $timeout was called once
    });
});

我知道我使用了间谍,但$timeout是一个函数,并没有提供窥探的方法。

我怎样才能做到这一点?谢谢。

0 个答案:

没有答案