jasmine + angular ex 10

$http

by ronapelbaum

HTML

<script src="https://jasmine.github.io/2.4/lib/jasmine.js"></script>
<script src="https://jasmine.github.io/2.4/lib/jasmine-html.js"></script>
<script src="https://jasmine.github.io/2.4/lib/boot.js"></script>
<link rel="stylesheet" href="https://jasmine.github.io/2.4/lib/jasmine.css">
<script src="https://code.angularjs.org/1.4.9/angular.js"></script>
<script src="https://code.angularjs.org/1.4.9/angular-mocks.js"></script>

JavaScript

//--------------BL------------
(function() {

  function MyController($http) {
    this.greeting = null;
    var that = this;
    this.greet = function(greeting) {
      return $http.get('/name').success(function(result) {
        that.greeting = greeting + ' ' + result;
      }).error(function(result, status) {
        that.greeting = 'Server Error: ' + status;
      });
    }
  }
  angular.module('MyModule', [])
    .controller('MyController', ['$http', MyController]);
})();

//--------------specs------------
describe("MyController spec", function() {
  var $controller, $httpBackend;
  beforeEach(module('MyModule'));

  beforeEach(inject(function(_$controller_, _$httpBackend_) {
    $controller = _$controller_;
    $httpBackend = _$httpBackend_;
  }));

  it("ctrl.greeting should be 'Hello Bob'", function() {
    var ctrl = $controller("MyController");
    ctrl.greet('Hello');

    expect(ctrl.greeting).toBeNull;
    //mock $httpBackend
    $httpBackend.whenGET('/name').respond(function(method, url, data, headers) {
      return [200, 'Bob'];
    });
    //we are still pending
    expect(ctrl.greeting).toBeNull();
    //flush!
    $httpBackend.flush();
    //now you're talking!
    expect(ctrl.greeting).toBe('Hello Bob');
  });

  it("ctrl.greeting should be 'server error'", function() {
   //TODO
  });

});