Sto avendo un'unità problema testare il seguente metodo:Come unità di prova di un metodo incatenato utilizzando Jasmine
$scope.changeLocation = function (url) {
$location.path(url).search({ ref: "outline" });
};
ho scritto il seguente test di unità che attualmente non riesce con questo errore (TypeError: Impossibile leggere proprieta 'di ricerca' di non definito):
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);
});
Se cambio la mia funzione al seguente, il test viene superato:
$scope.changeLocation = function (url) {
$location.path(url);
$location.search({ ref: "outline" });
};
Come posso testare questo metodo quando utilizzo il metodo di concatenazione? Devo configurare il mio $ locationMock in modo diverso? Per la vita di me non riesco a capirlo.
Stavo usando Jasmine 1.x quindi il .and.returnValue() non funzionava. Questo funziona benissimo per Jasmine 2.0. Ho modificato il .and.returnValue() con .andReturns() per farlo funzionare con 1.x. Aggiornerò presto Jasmine. Grazie per l'aiuto! – nweg
@nweg Siete i benvenuti. Grazie per la modifica. :) – PSL
Grazie a @PSL per il puntatore. Restituire lo stesso oggetto nei metodi da incatenare (modello builder) è la chiave qui. Ben illustrato. – Rajaraman