Ho un'app che utilizza Angular Translate (https://github.com/PascalPrecht/angular-translate). Traduci funziona perfettamente nell'applicazione tramite browser, ma quando provo a testare qualsiasi controller ottengo l'errore : Richiesta inaspettata: GET locale/locale-it.json. Come faccio a testare i miei controller unitari dal momento che translate fa una richiesta GET per il file di lingua all'avvio?Come si testano i controller con Angular Translate inizializzato in App Config?
Sto usando il generatore angolare yeoman con Karma.
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();
});
prova Controller:
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);
});
});
controller La documentazione è solo un controller standard generato.
Grazie mille per la risposta. Non sono ancora sicuro di come testarlo, anche se sono passato a preferredLanguage(), quindi il mio app.config ha questo aspetto: $ translateProvider.useStaticFilesLoader ({ prefisso: 'locale/locale-', suffisso : '.json ' }); $ translateProvider.preferredLanguage ('us'); $ translateProvider.useLocalStorage(); – Zacho
Oh e l'errore si verifica perché non ti aspetti una richiesta di ottenere http in modo esplosivo. Quindi nella tua specifica it() dovresti fare qualcosa del tipo: $ http.expectGET ('locale/locale-us.json'); E non dimenticare di svuotare le risposte in sospeso tramite $ http.flush(); – PascalPrecht
Ho funzionato. La soluzione era usare preferredLanguage() e sovrascrivere la funzione prima di inizializzare l'app nel mio test di unità. Questa è un'app considerevole e non volevo mettere il expectGET locale in ogni singolo test dell'unità. Grazie! – Zacho