2015-10-13 67 views
0

我使用的是視頻並創建了一個需要視頻指令的指令。在Angularjs的另一個模塊中嘲諷指令

這一切工作正常,但不是我想單元測試我的指令。

我想模擬videogular指令,以便我可以通過API操作數據返回。

但是,我的指令總是拿起視頻的具體實現。

我試圖嘲笑下面的指令的視頻模塊實現沒有運氣。然後我像通常的單元測試一樣嘲笑自己的模塊。

beforeEach(angular.mock.module('com.2fdevs.videogular')); 
beforeEach(angular.mock.module('com.2fdevs.videogular'),function($provide,$controllerProvider){ 
    videogular = function(){ 
     return { 
      template: '<video class="test"></video>', 
      transclude: true 
     } 
    }; 
    $controllerProvider.register('vgController', function(_$scope_){ 
     $scope = _$scope_; 
     $scope.totalTime = 100; 
    }); 
    $provide.factory('videogularDirective', videogular); 
}); 

我試着用同樣的方法將它注入到我自己的模塊中,結果相同。

我怎樣才能讓它使用我的模擬不具體的實現?

我現在有

beforeEach(angular.mock.module('com.2fdevs.videogular')); 
beforeEach(angular.mock.module('com.2fdevs.videogular'),function($provide,$controllerProvider,$compileProvider){ 
    videogular = function(){ 
     return { 
      template: '<video class="test"></video>', 
      transclude: true 
     } 
    }; 
    $provide.factory('videogularDirective', videogular); 
    $compileProvider.directive('videogularDirective', videogular); 
}); 
beforeEach(angular.mock.module('irisApp')); 
beforeEach(angular.mock.module('irisApp', function ($provide) { 

    $provide.constant('LoggingService', require('../../../server/mocks/LoggingService.mock')); 
    $provide.constant('run', {}); 

})); 
beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_) { 
    $rootScope = _$rootScope_; 
    $compile = _$compile_; 
})); 

但它仍然使用的具體指令。

回答

1

可以覆蓋指令,但你必須使用$compileProvider爲,即:

beforeEach(angular.mock.module('com.2fdevs.videogular')); 
beforeEach(angular.mock.module('com.2fdevs.videogular'),function($compileProvider, $controllerProvider){ 
    // ... 
    // same as above 
    $compileProvider.directive('videogularDirective', videogular); 
}); 
+0

我試過這種方法,現在看到我上面的代碼中,我仍然得到具體落實。我一定在做一些愚蠢的事情? – madlad

+0

你能否確定真正的'videogularDirective'代碼是* NOT *加載的? –