我有以下控制器:
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
是一个函数,并没有提供窥探的方法。
我怎样才能做到这一点?谢谢。