Mocking modal

Answer to SO question

HTML

<script src="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine.js"></script>
<script src="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine-html.js"></script>
<link rel="stylesheet" href="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine.css">
<script src="http://code.angularjs.org/1.2.0/angular.js"></script>
<script src="http://code.angularjs.org/1.2.0/angular-mocks.js"></script>
<script src="http://code.angularjs.org/1.2.0/angular-route.js"></script>
<script src="http://code.angularjs.org/1.2.0/angular-animate.js"></script>

JavaScript

//--- CODE --------------------------
angular.module('myModule', []); //module depends on AngularStrap

angular.module('myModule').service('myModuleService', ['$modal', function ($modal) {
    this.foo = function () {
        $modal.show();
    }
}]); //depends on $modal service from AngularStrap

// --- SPECS -------------------------

describe('mock modal', function () {
    var modalMock = jasmine.createSpyObj('modal', ['show']),
        service;

    beforeEach(function () {
        angular.mock.module('myModule');
        angular.mock.module(function ($provide) {
            $provide.value('$modal', modalMock);
        });

        angular.mock.inject(function (myModuleService) {
            // Initialize the service under test instance
            service = myModuleService;
        });
    });

    it('mocks modal', function () {
        service.foo();
        expect(modalMock.show).toHaveBeenCalled();
    });
});

// --- Runner -------------------------
(function () {
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;

    var htmlReporter = new jasmine.HtmlReporter();

    jasmineEnv.addReporter(htmlReporter);

    jasmineEnv.specFilter = function (spec) {
        return htmlReporter.specFilter(spec);
    };

    var currentWindowOnload = window.onload;

    window.onload = function () {
        if (currentWindowOnload) {
            currentWindowOnload();
        }
        execJasmine();
    };

    function execJasmine() {
        jasmineEnv.execute();
    }

})();