2014-02-28 155 views
3

我的配置文件是:如何停止在測試中加載JSON文件的角度轉換模型?

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() {}));,但那沒有任何影響。

謝謝!

+0

儘量不要加載angular-translate.js。然後看看哪些會失敗,並且您將更好地瞭解您需要模擬哪些服務。 – Wawy

回答

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文件中的原始模塊後,當第一個。

相關問題