SO question

Jasmine + Angular

HTML

<script src="http://jasmine.github.io/2.0/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/2.0/lib/jasmine-html.js"></script>
<script src="http://jasmine.github.io/2.0/lib/boot.js"></script>
<link rel="stylesheet" href="http://jasmine.github.io/2.0/lib/jasmine.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-mocks.js"></script>

JavaScript

// Source
angular.module('customProvider', [])
    .provider('cprovider', [
    '$windowProvider', function ($windowProvider) {
    var $window = $windowProvider.$get();
    

    var platform = function () {
        // some code there use $window
        // $window.location.reload();
        return 'xxx';
    };

    this.platform = platform;

    this.$get = function () {
        return {
            platform: platform
        };
    };
}]);

// Test
describe('cprovider', function () {
    var cprovider, $window;
    
    beforeEach(function () {
        angular.mock.module('customProvider');
        inject(function (_$window_, _cprovider_) {
            cprovider = _cprovider_;
            $window = _$window_;
            spyOn($window.location, 'reload');
        });
    });
    
    it('should something', function () {
        // Arrange and Act in beforeEach.

        // Assert. WON'T WORK
        expect(cprovider.platform()).toBe('xxx');
        expect($window.location.reload).toHaveBeenCalled();
    });
});