jasmine-angular: $provide()

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 MyDataService() {
        this.getName = function() {
            return 'bob';
        }
    }

    function MyUpperCaseService(MyDataService) {
        this.getUppercaseName = function() {
            return MyDataService.getName().toUpperCase();
        }
    }


    angular.module('MyModule', [])
        .service('MyDataService', MyDataService)
        .service('MyUpperCaseService', ['MyDataService', MyUpperCaseService]);

})();


//--------------specs------------
describe("MyUpperCaseService test suite", function() {
    var MyUpperCaseService;
    beforeEach(module('MyModule'));

    beforeEach(module(function($provide) {
        var spyObj = jasmine.createSpyObj('MockService', ['getName']);
        spyObj.getName.and.returnValue('alice');
        $provide.value('MyDataService', spyObj);
    }));

    beforeEach(inject(function(_MyUpperCaseService_) {
        MyUpperCaseService = _MyUpperCaseService_;
    }));

    it("spyOn() and return 'alice", function() {
        expect(MyUpperCaseService.getUppercaseName()).toBe('ALICE');
    });


});