2014-02-10 81 views
0

我有以下问题:加载模拟测试

假设我有模块

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

Mymodule中已服务定义如下:

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

现在我需要测试myModuleService和我需要模拟$模态服务 在测试(基于茉莉)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服务被加载,而不是模拟的$模式。
现在的问题是:为了使用mockModal加载myService而不是真正的$ modal,这里缺少了什么? 在此先感谢

回答

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