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。然后看看什么失败了,您就会更好地了解需要模拟哪些服务。