私はここ ( http://pascalprecht.github.io/angular-translate/ ) から angular translate を使用しており、正常に動作しますが、コントローラーの単体テストでエラーが発生します:
Unexpected request: GET scripts/i18n/locale-en.json
私はなぜ理解していないのですか?
私は yeoman を使用し、カルマでテストします。
app.js:
'use strict';
(function() {
angular.module('wbApp', ['authService', 'authUserService', 'checkUserDirective', 'ui.bootstrap', 'pascalprecht.translate'])
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/login.html',
controller: 'LoginCtrl',
access: {
isFree: true
}
})
.when('/main', {
templateUrl: 'views/main.html',
controller: 'MainCtrl',
access: {
isFree: false
}
})
.otherwise({
redirectTo: '/'
});
});
})();
configTranslate.js:
'use strict';
(function() {
angular.module('wbApp')
.config(['$translateProvider',
function($translateProvider) {
$translateProvider.useStaticFilesLoader({
prefix: 'scripts/i18n/locale-',
suffix: '.json'
});
$translateProvider.preferredLanguage('en');
}]);
})();
カルマ.conf.js:
files = [
...
'app/bower_components/angular-translate/angular-translate.js',
'app/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js',
...
];
コントローラーテスト:
'use strict';
describe('Controller: LoginCtrl', function() {
// load the controller's module
beforeEach(module('wbApp'));
var LoginCtrl, scope, location, httpMock, authUser;
// Initialize the controller and a mock scope
beforeEach(inject(function($controller, $rootScope, $location, $httpBackend, AuthUser) {
authUser = AuthUser;
location = $location;
httpMock = $httpBackend;
scope = $rootScope.$new();
LoginCtrl = $controller('LoginCtrl', {
$scope: scope
});
httpMock.when('GET', 'scripts/i18n/locale-en.json').passThrough();
}));
it(...);
...
});
これをテスト コントローラーに追加すると、同じエラーが生成されます。
httpMock.when('GET', 'scripts/i18n/locale-en.json').respond(200);
httpMock.flush();
また
httpMock.when('GET', 'scripts/i18n/locale-en.json').passThrough();
httpMock.flush();
私はこの投稿を見つけましたApp Configで初期化されたAngular Translateでコントローラーをテストするにはどうすればよいですか? しかし、私を助けませんでした:/
私はテストで $httpBackend を広く使用しており、正常に動作しますが、この場合は効果がありません。行にコメントすると:
$translateProvider.preferredLanguage('en');
(コントローラーで)ランタイムを追加すると、明らかにエラーになります
$translate.uses(local);
私は同じエラーで終わりますか?
したがって、翻訳構成 (configTranslate.js) に目を向けても、実行時に同じ結果が得られます。
Unexpected request: GET scripts/i18n/locale-en.json
これは、「beforeEach(inject(function(...});」のいずれか)でテストした構文です。
またはテストで "it('...', function() {...});"
httpMock.expectGET('scripts/i18n/locale-en.json');
httpMock.when('GET', 'scripts/i18n/locale-en.json').passThrough();
httpMock.when('GET', 'scripts/i18n/locale-en.json').respond(data);
最後に
httpMock.flush();
$ apply も試しました
httpMock.expectGET('scripts/i18n/locale-fr.json');
scope.$apply(function(){
$translate.uses('fr');
});
httpMock.flush();
何も起こらない、それでもこのエラーは私を夢中にさせている..
何か提案があれば