フラグが設定されている場合、5秒ごとに呼び出される再帰的な方法があります。私は、メソッドを偵察して、それを呼び出して、6秒待ってからメソッドが2回呼び出されると期待しているテストを書くことを試みています。私のテストは失敗します。スパイはメソッドが一度だけ呼び出される(最初の呼び出し)と報告します。再帰角制御法でのスパイク
私はAngular style guideを使用していますので、これらのメソッドをthis
のプレースホルダーに付けています。私は、角度モック$controller()
から返されたコントローラのスコープに問題があるかもしれないと思うが、わからない。ほとんどの人が方法を$scope
につけている。
$scope
にメソッドを追加しないで、自分のメソッドが2回呼び出されたことを確認するスパイを作成するにはどうすればよいですか?
app.js:
'use strict';
angular
.module('MyApp', [
//...
]);
angular
.module('MyApp')
.controller('MyController', MyController);
MyController.$inject = [
//...
];
function MyController() {
var vm = this;
vm.callMyself = callMyself;
vm.flag = false;
function callMyself() {
console.log('callMyself');
if (vm.flag) {
console.log('callMyself & flag');
setTimeout(vm.callMyself, 5000);
}
}
}
appSpec.js:
describe('MyController', function() {
var $scope;
beforeEach(function() {
module('MyApp');
});
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope.$new();
controllerInstance = $controller('MyController', {$scope: $scope});
}));
it('should call itself within 6 seconds if flag is true', function (done) {
controllerInstance.flag = true;
spyOn(controllerInstance, 'callMyself');
controllerInstance.callMyself();
setTimeout(function() {
expect(controllerInstance.callMyself).toHaveBeenCalledTimes(2);
done();
}, 6000);
}, 7000);
});