我的配置文件是:
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 :(得分: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文件中的原始模块之后,作为第一个文件。