如何阻止角度转换模型在测试中加载JSON文件?

时间:2014-02-28 16:31:15

标签: angularjs karma-runner

我的配置文件是:

angular.module('mean').config(['$routeProvider', '$translateProvider', '$locationProvider',
  function($routeProvider, $translateProvider, $locationProvider) {
    $routeProvider.
      when('/login', {
        templateUrl: '/views/login.html',
        controller: 'LoginController'
      }).
      when('/company', {
        templateUrl: '/views/company/dashboard.html',
        controller: 'CompanyController'
      }).
      otherwise({
          redirectTo: '/login'
      });

    $locationProvider.html5Mode(true);
    $translateProvider.useStaticFilesLoader({
      prefix: '/lang/',
      suffix: '.json'
    });
    $translateProvider.useCookieStorage();
    $translateProvider.preferredLanguage('en-US');
  }
]);

运行我的测试时,它会显示:WARN [web-server]: 404: /lang/en-US.json

我的测试根本没有提及或包含translateProvider。我只有beforeEach(module('mean'));

那么如何从测试中删除translateProvider呢?我试过了beforeEach(module('pascalprecht.translate', function() {}));,但这没有任何影响。

谢谢!

1 个答案:

答案 0 :(得分:4)

你需要一个自定义的模拟模块,然后你必须在你的karma.conf中加载它而不是原来的模块(在它之后,这将被覆盖)。

脚本/嘲笑/角translate.js:

!(function(angular){
   'use-strict';
    angular.module('pascalprecht.translate', []).
      filter('translate', function(){
             return function(input){return input};
      });
}(window.angular))

karma.conf:

files = [
    JASMINE,
    JASMINE_ADAPTER,
    'scripts/libs/angular.js',
    'scripts/libs/angular-mocks.js',
    'scripts/angular-translate.js', // Real module.
    'scripts/mocks/*.js', //Custom mocks.
    'scripts/specs/*.spec.js' // loads my spec file.
] 

当然你也必须嘲笑$ translationProvider及其方法,但我相信我不必为你实现它。

这是模拟此模块的正确方法,您可以在配置阶段始终使用装饰器。

脚本/嘲笑/角平移-decorator.js

!(function(angular){
   'use-strict';
    angular.module('pascalprecht.translate.decorator', []).
       .config(function($translationProvider){
           $provide.decorator( '$translationProvider', [ "$delegate", function(  $delegate ){
                $delegate.useStaticFilesLoader = function(){return undefined};

           }
        });
}(window.angular))

这个文件也应该放在karma.conf文件中的原始模块之后,作为第一个文件。