在Jasmine测试中加载$ modal的模拟

时间:2014-02-10 11:58:04

标签: javascript angularjs jasmine

我有以下问题:

假设我有模块

angular.module('myModule',['$strap'] );//module depends on AngularStrap

myModule的服务定义如下:

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

现在我需要测试myModuleService,我需要模拟$ modal服务 在test(基于jasmine)myModuleService中加载如下

var modalMock = jasmine.createSpy();
..
angular.mock.module('myModule');
...
$provide.value('$modal', modalMock);
..
angular.mock.inject(function ($injector) {
// Initialize the service under test instance
   myService = $injector.get('myModuleService');      
});

问题是加载myModuleService时,还加载了真正的$ modal服务而不是模拟$ modal。
问题是:为了使用mockModal而不是真正的$ modal加载myService,这里缺少什么? 提前致谢

1 个答案:

答案 0 :(得分:3)

我遗漏了一些测试实现细节,但以下工作:

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();
    });
});

您可以找到完整的fiddle here