<!DOCTYPE html>
<html>

<head>
  <script data-require="angularjs@1.5.0" data-semver="1.5.0" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script>
  <script data-require="angular-mocks@1.5.0" data-semver="1.5.0" src="https://code.angularjs.org/1.5.0/angular-mocks.js"></script>
  <script src=""></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
</head>

<body>
  <div ng-app="MyApp">
    <div ng-controller="MyController as vm">
      <p>Open your console: </p>
      <button ng-click="vm.callMyself()">callMyself</button>
      <button ng-click="vm.flag = true">set flag to true</button>
      <br><br>
      <a href="spec.html">Run tests</a>
    </div>
  </div>
</body>

</html>
'use strict';

var k = 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);
        }
    }
}
/* Styles go here */

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);
});
<!DOCTYPE html>
<html>

  <head>
    <link data-require="jasmine@2.4.1" data-semver="2.4.1" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.css" />
    <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine.js"></script>
    <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/jasmine-html.js"></script>
    <script data-require="jasmine@2.4.1" data-semver="2.4.1" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.4.1/boot.js"></script>
    <script data-require="angularjs@1.5.0" data-semver="1.5.0" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script>
    <script data-require="angular-mocks@1.5.0" data-semver="1.5.0" src="https://code.angularjs.org/1.5.0/angular-mocks.js"></script>
    <script src=""></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
    <script src="scriptSpec.js"></script>
  </head>

  <body>

  </body>

</html>