Angularjs 如何阻止angular translate模型在测试中加载JSON文件?

Angularjs 如何阻止angular translate模型在测试中加载JSON文件?,angularjs,karma-runner,Angularjs,Karma Runner,我的配置文件是: angular.module('mean').config(['$routeProvider', '$translateProvider', '$locationProvider', function($routeProvider, $translateProvider, $locationProvider) { $routeProvider. when('/login', { templateUrl: '/views/login.htm

我的配置文件是:

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服务器]:404:/lang/en-US.json

我的测试根本没有提到或包括
translateProvider
。我只是在每个模块(模块('mean')之前有

那么,如何从测试中剔除
translateProvider
?我在每个模块('pascalprecht.translate',function(){})之前都尝试了
,但这没有影响


谢谢

您需要一个定制的模拟模块,然后您必须在您的karma.conf中加载它,而不是原来的模块(或者在它之后,它将被覆盖)

脚本/mocks/angular-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及其方法,但我相信我不必为您实现它

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

scripts/mocks/angular-translate-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文件的原始模块之后,作为第一个模块。

尽量不要加载angular-translate.js。然后看看什么失败了,您就会更好地了解需要模拟哪些服务。