jasmine + angular ex 8

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() {

  var LastNameService = function() {
    console.log("LastNameService creation - start", Date.now());
    for (var i = 0; i < 10000; i++);
    console.log("LastNameService creation - end", Date.now());

    this.getLastName = function(firstName) {
      switch (firstName) {
        case "Bob":
          return "Marley";
        case "Phill":
          return "Collins";
      }
    }
  };

  var Greeter = function(dataService) {
    function greet(name) {
      return "Hello " + name + " " + dataService.getLastName(name);
    }
    this.greet = greet;
  };

  //OtherModule
  angular.module('OtherModule', [])
    .service('LastNameService', LastNameService);

  //MyModule
  angular.module('MyModule', ['OtherModule'])
    .service('GreeterService', ['LastNameService', Greeter]);
})();


//--------------specs------------
describe("MyController test suite", function() {
  var GreeterService;
  beforeEach(module('MyModule'));
  
  beforeEach(module(function($provide) {
    var mockService = jasmine.createSpyObj('DS', ['getLastName']);
    mockService.getLastName.and.returnValue('Dylen');
    $provide.value('LastNameService', mockService);
    //TODO try '$provide.service()'
    //$provide.service('LastNameService', function(){return mockService;});

  }));
  
  beforeEach(inject(function(_GreeterService_) {
    GreeterService = _GreeterService_;
  }));

  it("should greet corretly", function() {
    expect(GreeterService.greet('Bob')).toBe('Hello Bob Dylen');
  });

});