0

私は videogular を使用しており、videogular ディレクティブを必要とするディレクティブを作成しました。

これはすべて正常に機能しますが、ディレクティブを単体テストしたくありません。

API を介して返されるデータを操作できるように、videogular ディレクティブをモックしたいと思います。

しかし、私のディレクティブは常に videogular の具体的な実装を取り上げています。

以下のディレクティブの videogular モジュールの実装をモックしようとしていますが、うまくいきません。次に、単体テストで通常行うように、独自のモジュールをモックします。

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

ただし、具象ディレクティブは引き続き使用します。

4

1 に答える 1

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);
});
于 2015-10-13T08:26:01.033 に答える