title: Error: Timeout - Async callback was not invoked within timeout specified.... .DEFAULT_TIMEOUT_INTERVAL
body: <p>I have an angular service class : - </p>
  
  <pre><code>angular.module('triggerTips')
         .service('userData', function ($rootScope, $http, $log, $firebase) {
  
      this._log = {
          service : 'userData'
      };
  
      // Synchronized objects storing the user data
      var config;
      var userState;
  
      // Loads the user data from firebase
      this.init = function(readyCallback) {
          var log = angular.extend({}, this._log);
          log.funct = 'init';
  
          var fireRef = new Firebase('https://XYZfirebaseio.com/' + $rootScope.clientName);
         config = $firebase(fireRef.child('config')).$asObject();
         userState = $firebase(fireRef.child('userState').child($rootScope.userName)).$asObject();
  
    Promise.all([config.$loaded(), userState.$loaded()]).
      then(
        function() {
          if(config == null || Object.keys(config).length &lt; 4) {
            log.message = 'Invalid config';
            $log.error(log);
            return;
          }
  
          if(!userState.userProperties) {
            userState.userProperties = {};
          }
  
          if(!userState.contentProperties) {
            userState.contentProperties = {};
          } 
  
          log.message = 'User Properties: ' + JSON.stringify(userState.userProperties);
          $log.debug(log);
  
          log.message = 'Content Properties: ' + JSON.stringify(userState.contentProperties);
          $log.debug(log);
  
          log.message = 'Loaded user data from firebase';
          $log.debug(log);
          readyCallback();
        },
        function() {
          log.message = 'Unable to load user data from firebase';
          $log.error(log);
        }
      );
  };
  
  // Returns the initial tip configuration
  this.getConfig = function() {
    return config;
  };
  
  // Set the value of a user property
  // A user property is something about the user himself
  this.setUserProperty = function(property, value) {
    if(!userState.userProperties) {
      userState.userProperties = {};
    }
    userState.userProperties[property] = value;
    userState.$save();
    $rootScope.$broadcast('user-property-change', property);
  };
  
  // Get the value of a user property
  this.getUserProperty = function(property) {
    if(userState.userProperties) {
      return userState.userProperties[property];
    }
  };
  
  // Set the value of a user content property
  // A content property is something about a particular peice of content for a particular user
  this.setContentProperty = function(contentName, property, value) {
    if(!userState.contentProperties[contentName]) {
      userState.contentProperties[contentName] = {};
    }
  
    userState.contentProperties[contentName][property] = value;
    userState.$save();
    $rootScope.$broadcast('content-property-change', contentName, property);
  };
  
  // Increment a count property on the user state for a given tip
  this.incrementContentProperty = function(contentName, property) {
    if(!userState.contentProperties[contentName]) {
      userState.contentProperties[contentName] = {};
    }
    if(!userState.contentProperties[contentName][property]) {
      userState.contentProperties[contentName][property] = 0;
    }
  
    userState.contentProperties[contentName][property]++;
    userState.$save();
    $rootScope.$broadcast('content-property-change', contentName, property);
  };
  
  // Returns the user state for a given tip and property
  this.getContentProperty = function(contentName, property) {
    if(userState.contentProperties) {
      var t = userState.contentProperties[contentName];
      if(t) {
        return t[property];
      }
    }
  };
  });
  </code></pre>
  
  <p>I am trying to unit test this service using jasmine:-</p>
  
  <p>my unit test is :- </p>
  
  <pre><code>    'use strict';
  
  describe('Service: userData', function () {
  
    // load the service's module
    beforeEach(function() {
      module('triggerTips');
    });
  
    // instantiate service
    var userData;
    beforeEach(inject(function (_userData_) {
      userData = _userData_;
    }));
  
    it('should load correctly', function () {
      expect(!!userData).toBe(true);
    });
  
    describe('after being initialized', function () {
  
      beforeEach(function(done) {
        // Unable to get this working because the callback is never called
          userData.init(function() {
              done();
          });
          jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;
      });
  
      it('should have a valid config', function (done) {
           setTimeout(function() {
               expect(Object.keys(userData.getConfig()).length == 0);
               done();
             }, 1500);}); }); });
  </code></pre>
  
  <p>I read about the Asynchronous Support in Jasmine, but as I am rather new to unit testing with JavaScript couldn't make it work.</p>
  
  <p>I am receiving an error :</p>
  
  <blockquote>
    <p>Async callback was not invoked within timeout specified by
    jasmine.DEFAULT_TIMEOUT_INTERVAL</p>
  </blockquote>
  
  <p>Can somebody help me providing working example of my code with some explanation?</p>