title: inject a custom service in karma jasmine
body: <blockquote>
    <p>I was trying out jasmine with karma. I have a custom service
    ApiService which i need to inject in my spec file. But when am trying
    to inject the ApiService i get Error: [$injector:unpr] Unknown
    provider: ApiService &lt;- ApiService</p>
    
    <p>this is my controller</p>
  </blockquote>
  
  <pre><code>'use strict';
  angular.module('assessmentApp')
      .controller('NewUserController', NewUserController)
      .run(["$rootScope", "$anchorScroll", function($rootScope, $anchorScroll) {
          $rootScope.$on("$locationChangeSuccess", function() {
              $anchorScroll();
          });
      }]);
  
  NewUserController.$inject = ['$scope', '$rootScope', '$location', '$timeout', 'ApiService'];
  
  function NewUserController($scope, $rootScope, $location, $timeout, ApiService) {
      //console.log("innn   NewUserController2   ::::")
      var vm = this;
      var boardsClassSubjectCombinations = [];
      var studentId = $rootScope.globals.studentId;
      var assessmentCampaignId = $scope.assessmentCampaignId = $rootScope.globals.assessmentCampaignId;
      vm.currentQuestion = 1;
  
      //sanity check if the user already has academics added
      ApiService.getAll('students/' + studentId + '/latest-student-academic', true, ['students/{{id}}/academic'])
          .then(function(res) {
              if (res.data) {
                  //send this guy to home page
                  $location.url('/home');
              }
          });
  
      function getStates() {
          ApiService.getAll('states', true).then(function(response) {
              $scope.states = response.data;
          });
      }
      getStates();
  
  }
  </code></pre>
  
  <blockquote>
    <p>this is my test file</p>
  </blockquote>
  
  <pre><code>describe('NewUserController Test', function() {
    beforeEach(module('assessmentApp'));
      // beforeEach(module('assets'));
      //beforeEach(module('ApiService'))
  
  
    var scope, location, timeout,apiService, q, authenticationService;
  
    beforeEach(inject(function($location,$rootScope,$timeout, ApiService){
  
      scope = $rootScope.$new();
      location = $location;
  
      timeout = $timeout;
      q = _$q_;
      console.log(ApiService)
  
      //spyOn(ApiService, 'ApiService');
      //spyOn(Point, 'method');
  
      // console.log("ApiService :::"+ApiService)
  
      //$controller = _$controller_('NewUserController', { $scope: $scope });
      //console.log("NewUserController======="+$controller)
    }));
  
    describe('$scope.grade', function() {
      it('sets the strength to "strong" if the password length is &gt;8 chars', function() {
        console.log("$location ::::"+location)
        console.log("scope ::::"+scope)
        console.log("timeout ::::"+timeout)
        console.log("ApiService ::::"+ApiSrvce)
        console.log("q ::::"+q)
        //console.lopg("authenticationService :::"+authenticationService)
        //console.log("$scope ::::::"+$scope)
        expect(true).toEqual(true);
      });
    });
  });
  </code></pre>
  
  <blockquote>
    <p>This is my karma.conf.js file</p>
  </blockquote>
  
  <pre><code>module.exports = function(config) {
    config.set({
  
      // base path that will be used to resolve all patterns (eg. files, exclude)
      basePath: '',
  
  
      // frameworks to use
      // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
      frameworks: ['jasmine'],
  
  
      // list of files / patterns to load in the browser
      files: [
        //'test-main.js',
        '../bower_components/jquery/dist/jquery.js',
        '../bower_components/angular/angular.js',
        '../bower_components/bootstrap/dist/js/bootstrap.js',
        '../bower_components/angular-route/angular-route.js',
        '../bower_components/particles.js/particles.js',
        '../bower_components/angular-cookies/angular-cookies.js',
        '../bower_components/toastr/toastr.js',
        '../bower_components/angular-sanitize/angular-sanitize.js',
        '../bower_components/d3/d3.js',
        '../bower_components/c3/c3.js',
        '../bower_components/moment/moment.js',
        '../bower_components/humanize-duration/humanize-duration.js',
        '../bower_components/angular-timer/dist/angular-timer.js',
        '../bower_components/underscore/underscore.js',
        '../bower_components/scrollreveal/dist/scrollreveal.js',
        '../bower_components/lodash/lodash.js',
        '../bower_components/angular-youtube-mb/src/angular-youtube-embed.js',
        '../bower_components/angular-mocks/angular-mocks.js',
        //'../assets/**/*.js',
        //'../assets/**/*.html',
        //'../bower_components/angular/angular.js',
        //'../bower_components/angular-mocks/angular-mocks.js',
        '../app/scripts/app.js',
        '../app/scripts/controllers/**/*.js',
        '../app/scripts/directives/**/*.js',
        '../app/scripts/services/**/*.js',
        '../app/scripts/**/*.js',
        '../../assets/src/assets/services/*.js',
        'spec/**/*.js'      
  
      ],
  
  
      // list of files to exclude
      exclude: [
      ],
  
  
      // preprocess matching files before serving them to the browser
      // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
      preprocessors: {
      },
  
  
      // test results reporter to use
      // possible values: 'dots', 'progress'
      // available reporters: https://npmjs.org/browse/keyword/karma-reporter
      reporters: ['progress'],
  
  
      // web server port
      port: 9876,
  
  
      // enable / disable colors in the output (reporters and logs)
      colors: true,
  
  
      // level of logging
      // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
      logLevel: config.LOG_INFO,
  
  
      // enable / disable watching file and executing tests whenever any file changes
      autoWatch: true,
  
  
      // start these browsers
      // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
      browsers: ['PhantomJS'],
  
  
      // Continuous Integration mode
      // if true, Karma captures browsers, runs the tests and exits
      singleRun: false,
  
      // Concurrency level
      // how many browser should be started simultaneous
      concurrency: Infinity
    })
  }
  </code></pre>
  
  <p><strong>What i see is, when i try to inject any custom service it skips the beforeEach function and the logs i get in it function is</strong></p>
  
  <pre><code>LOG: '$location ::::undefined'
  LOG: 'scope ::::undefined'
  LOG: 'timeout ::::undefined'
  LOG: 'ApiService ::::undefined'
  </code></pre>