ich die folgenden Methode ein Problem Einheit Testen:Wie Einheit eine verkettete Methode testet Jasmin mit
$scope.changeLocation = function (url) {
$location.path(url).search({ ref: "outline" });
};
ich folgenden Unit-Test geschrieben habe, die derzeit mit diesem Fehler (Typeerror nicht: kann nicht lesen Eigenschaft 'Suche' undefinierter):
var $locationMock = { path: function() { }, search: function() { } };
it('changeLocation should update location correctly', function() {
$controllerConstructor('CourseOutlineCtrl', { $scope: $scope, $location: $locationMock });
var url = "/url/";
spyOn($locationMock, "path");
spyOn($locationMock, "search");
$scope.changeLocation(url);
expect($locationMock.search).toHaveBeenCalledWith({ ref: "outline" });
expect($locationMock.path).toHaveBeenCalledWith(url);
});
Wenn ich meine Funktion der folgenden ändern, hat der Test:
$scope.changeLocation = function (url) {
$location.path(url);
$location.search({ ref: "outline" });
};
Wie kann ich diese Methode testen, wenn ich Methodenverkettung verwende? Muss ich meinen $ locationMock anders einrichten? Für das Leben von mir kann ich das nicht herausfinden.
Ich habe Jasmine 1.x verwendet, so dass die .and.returnValue() fehlgeschlagen ist. Das funktioniert großartig für Jasmine 2.0. Ich habe die .and.returnValue() in .andReturns() geändert, damit es mit 1.x funktioniert. Ich werde bald Jasmine upgraden. Danke für die Hilfe! – nweg
@nweg Gern geschehen. Danke für die Bearbeitung. :) – PSL
Danke @PSL für den Zeiger. Die Rückgabe des gleichen Objekts in den zu verkettenden Methoden (Builder-Muster) ist hier der Schlüssel. Ordentlich illustriert. – Rajaraman