Mam aplikację, która używa Angular Translate (https://github.com/PascalPrecht/angular-translate). Tłumacz działa świetnie w aplikacji za pośrednictwem przeglądarki, ale kiedy próbuję przetestować dowolny kontroler, pojawia się błąd Błąd: nieoczekiwane żądanie: GET locale/locale-en.json. W jaki sposób mogę przetestować swoje kontrolery, ponieważ translate wykonuje żądanie GET dla pliku językowego podczas uruchamiania?Jak przetestować kontrolery z Angular Translate zainicjowanym w App Config?
Używam generatora kątowego Yeomana z Karmą.
App.js:
angular.module('myApp', ['ngCookies', 'ui.bootstrap', 'pascalprecht.translate'])
.config(function ($routeProvider, $locationProvider, $translateProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
$translateProvider.useStaticFilesLoader({
prefix: 'locale/locale-',
suffix: '.json'
});
$translateProvider.uses('en');
$translateProvider.useLocalStorage();
});
testowe Kontroler:
describe('Controller: DocumentationCtrl', function() {
// load the controller's module
beforeEach(module('myApp'));
var DocumentationCtrl,
scope,
$httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $injector) {
$httpBackend = $injector.get('$httpBackend');
scope = $rootScope.$new();
DocumentationCtrl = $controller('DocumentationCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function() {
$httpBackend.whenGET('locale/locale-en.json').respond(200, {
"TITLE": 'My App'
});
expect(scope.awesomeThings.length).toBe(3);
});
});
Dokumentacja sterownika jest tylko standardowy generowane kontrolera.
Dziękuję bardzo za odpowiedź. Nadal nie jestem pewien, jak to przetestować, chociaż przełączyłem się na Preferowany język(), więc mój app.config wygląda tak: $ translateProvider.useStaticFilesLoader ({ prefiks: "locale/locale-", sufiks: '.json ' }); $ translateProvider.preferredLanguage ("nas"); $ translateProvider.useLocalStorage(); – Zacho
Och i błąd występuje, ponieważ nie oczekujesz od użytkownika żądania HTTP. Tak więc w specyfikacji your it() powinieneś zrobić coś takiego: $ http.expectGET ("locale/locale-us.json"); I nie zapomnij spuścić oczekujących odpowiedzi przez $ http.flush(); – PascalPrecht
Mam to działa. Poprawka polegała na użyciu preferredLanguage() i zastąpieniu tej funkcji przed zainicjalizowaniem aplikacji w moim teście jednostkowym. Jest to spora aplikacja i nie chciałem umieścić locale expectGET w każdym pojedynczym teście jednostkowym. Dzięki! – Zacho