Mi piacerebbe prendere in giro una funzionalità in Karma che restituisce un file dopo aver fatto clic su un pulsante di download. Ho la seguente controller AngularJS:Come imitare una funzione window.location in Karma/gelsomino
var secure = angular.module('secure', []);
secure.controller('ProcedureController', ProcedureController);
ProcedureController.$inject = ['$controller', '$rootScope', '$scope', '$http'];
function ProcedureController($controller, $rootScope, $scope, $http) {
... // Controller does more stuff
var href = window.location.href.split('/');
var baseUrl = href[0] + '//' + href[2];
var url = baseUrl + "/secure/regulations";
$http.get(url)
.success(function (data) {
$scope.questions = data[0];
})
$scope.download = function (msg) {
window.location = url + "/" + msg + "/attachment";
}
}
L'oggetto window.location basta chiamare un servizio RESTful che gli fornisce il file desiderato direttamente. E questo è, in fondo, la mia prova-test:
describe('ProcedureController', function() {
beforeEach(module('secure'));
beforeEach(inject(function ($rootScope, $http, $controller, $injector) {
scope = $rootScope.$new();
ProcedureController = $controller('ProcedureController', {
$scope: scope,
$http: $http
});
}));
it ('should download something', function() {
expect(scope.download(1)).toBeDefined();
});
});
Quindi, la mia idea è quella di verificare se scope.download funzione viene chiamata, se si restituisce l'URL destra, vale a dire, quando provo portata .download (1), la risposta prevista sarebbe /secure/rules/1/attachment, all'incirca.
Come si deve prendere in giro? Qualsiasi aiuto è apprezzato!
C'è un motivo per cui non si utilizza '$ finestra 'o' $ location'? Questi potrebbero essere iniettati e puoi prenderli in giro usando 'inject()' https://docs.angularjs.org/api/ng/service/$window –
Sì, hai ragione. Non me ne sono reso conto. Ora sto usando quella referenza. Grazie. –