【问题标题】:Mocking a Directive in another Module in Angularjs在 Angularjs 的另一个模块中模拟指令
【发布时间】:2015-10-13 08:09:38
【问题描述】:

我正在使用 videogular 并创建了一个需要 videogular 指令的指令。

这一切都很好,但我不想对我的指令进行单元测试。

我想模拟 videogular 指令,以便我可以通过 API 操作数据返回。

但是我的指令总是选择 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_;
}));

但它仍然使用具体指令。

【问题讨论】:

    标签: angularjs unit-testing videogular


    【解决方案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);
    });
    

    【讨论】:

    • 我已经尝试过这种方法,现在看我上面的代码,我仍然得到了具体的实现。我一定是在做傻事?
    • 你能确定真正的videogularDirective 代码没有加载吗?
    猜你喜欢
    • 2018-05-14
    • 2023-03-29
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多