title: How do I mock $http in AngularJS service Jasmine test?
body: <p>I am trying to test an AngularJS service <code>carService</code>, but the <code>$httpBackend</code> does not seem to work.</p>
  
  <pre><code>//carService
  angular.module('services').factory('carService',
      function($http) {
          return {
              getTypes: function() {
                  return $http.get('/api/cars/types');
              }
          };
      });
  </code></pre>
  
  <p>Can anybody explain why the response is null?</p>
  
  <pre><code>describe("Services", function () {
  
      beforeEach(module("app.services"));
  
      describe("Car services", function () {
  
          var service, $httpBackend;
  
          beforeEach(inject(function($injector) {
              service = $injector.get('carService');
              $httpBackend = $injector.get('$httpBackend');
  
              $httpBackend.when('GET', "/api/cars/types").respond(["Toyota", "Honda", "Tesla"]);
          }));
  
          afterEach(function() {
              $httpBackend.verifyNoOutstandingExpectation();
              $httpBackend.verifyNoOutstandingRequest();
          });
  
          it('getTypes - should return 3 car manufacturers', function () {
              service.getTypes().then(function(response) {
                  expect(response.length).toEqual(3); //the response is null
              });
              $httpBackend.flush();
          });
  
  
      });
  });
  </code></pre>