2014-02-10 86 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