title: $httpBackend.flush() still needs timeout for defining objects
body: <p>I am unittesting my AngularJS app with Karma and stubbing the backend with $HttpBackend. Somehow, the flush() method does not seem to resolve all my requests as some of the variables in the controller still remain undefined. However, if I add a timeout before resolving my expectation it works fine!</p>
  
  <p>My Controller:</p>
  
  <pre><code>    feedbackApp.controller('CompetenceCtrl', [ '$scope', '$location', 'Restangular', function CompetenceCtrl($scope, $location, Restangular) {
  
          $scope.compId = null;
          $scope.index = null;
  
          Restangular.one('questionnaires',1).get().then(function (q) {
              $scope.questionnaire = q;
  
              angular.forEach($scope.questionnaire.competences, function (value, key) {
                  var compTemp = new models.Competence(value);
                  if (!compTemp.finished() &amp;&amp; $scope.compId === null) {
                      $scope.compId = compTemp.id;
                      $scope.index = key;
                  }
              });
              getCompetence($scope.compId);
  
          });
  
          function getCompetence(compId) {
              Restangular.one('questionnaires',1).one('competences', compId).get().then(function (c) {
                  $scope.competence = c;
              });
          }
      }]);
  </code></pre>
  
  <p>My specs:</p>
  
  <pre><code>'use strict';
  
  describe('Controller: CompetenceCtrl', function () {
      //load the controller's module
      beforeEach(module('360FeedbackApp', 'mockQuestionnaire', 'mockCompetences'));
  
      var $httpBackend,
          $scope,
          $location,
          createController;
  
      beforeEach(inject(function ($injector, _Restangular_,defaultQuestionnaire, defaultCompetences) {
          // Set up the mock http service responses
          $httpBackend = $injector.get('$httpBackend');
          // backend definition common for all tests
          $httpBackend.whenGET(apiUrl + '/questionnaires/1').respond(defaultQuestionnaire);
  
          $httpBackend.whenGET(apiUrl + '/questionnaires/1/competences/1').respond(defaultCompetences.competences[0]);
          $httpBackend.whenGET(apiUrl + '/questionnaires/1/competences/2').respond(defaultCompetences.competences[1]);
          $httpBackend.whenGET(apiUrl + '/questionnaires/1/competences/3').respond(defaultCompetences.competences[2]);
          $httpBackend.whenGET(apiUrl + '/questionnaires/1/competences/4').respond(defaultCompetences.competences[3]);
          $httpBackend.whenGET(apiUrl + '/questionnaires/1/competences/5').respond(defaultCompetences.competences[4]);
  
          $httpBackend.whenPUT(apiUrl + '/questionnaires/1/competences/1').respond(200);
          $httpBackend.whenPUT(apiUrl + '/questionnaires/1/competences/2').respond(200);
          $httpBackend.whenPUT(apiUrl + '/questionnaires/1/competences/3').respond(200);
          $httpBackend.whenPUT(apiUrl + '/questionnaires/1/competences/4').respond(200);
          $httpBackend.whenPUT(apiUrl + '/questionnaires/1/competences/5').respond(200);
  
          // Get hold of a scope (i.e. the root scope)
          $scope = $injector.get('$rootScope');
          // and the location
          $location = $injector.get('$location');
          // The $controller service is used to create instances of controllers
          var $controller = $injector.get('$controller');
  
          createController = function () {
              return $controller('CompetenceCtrl', {'$scope': $scope, '$location': $location, 'Restangular': _Restangular_ });
          };
      }));
  
      afterEach(function () {
          $httpBackend.verifyNoOutstandingExpectation();
          $httpBackend.verifyNoOutstandingRequest();
      });
  
      it('should set the first competence', function () {
          $httpBackend.expectGET(apiUrl + '/questionnaires/1/competences/1');
          createController();
          $httpBackend.flush();
          //DO NOT UNDERSTAND WHY I NEED THIS TIMEOUT! 
          //THE TEST FAILS WITH 'undefined' IF I DONT USE IT!
          setTimeout(function() {
          expect($scope.competence).toBeDefined();
          }, 5000);
      });
  </code></pre>
  
  <p>Any help is greatly appreciated!</p>