Ich möchte eine Funktionalität in Karma verspotten, die eine Datei nach dem Klicken auf eine Download-Schaltfläche zurückgibt. Ich habe folgendes AngularJS Controller:Wie man eine window.location Funktion in Karma/Jasmin spottet
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";
}
}
Das window.location Objekt nur einen RESTful Dienst rufen, die ihm direkt die gewünschte Datei zur Verfügung stellt. Und das ist im Grunde genommen mein Try-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();
});
});
So ist meine Idee zu überprüfen, wenn scope.download Funktion aufgerufen wird, wenn es die richtige URL zurückgibt, nämlich dann, wenn ich Umfang versuchen .download (1), die erwartete Antwort wäre /secure/Vorschriften/1/Anhang, grob.
Wie soll ich mich verspotten? Jede Hilfe wird geschätzt!
Gibt es einen Grund, warum Sie nicht '$ window' oder' $ location' verwenden? Diese könnten injiziert werden und Sie können sie mit 'inject()' spotten https://docs.angularjs.org/api/ng/service/$window –
Ja, Sie haben Recht. Ich habe es einfach nicht bemerkt. Jetzt benutze ich diese Referenz. Danke. –