在Angularjs的另一个模块中嘲笑指令

时间:2015-10-13 08:09:38

标签: angularjs unit-testing 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 个答案:

答案 0 :(得分: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);
});