Próbuję zrozumieć, jak przetestować mój kod z jaśminem i angularJS. Napisałem projekt testowy ze sterownikiem i usługą wstrzykniętą. Teraz chcę przetestować kontroler i próbowałem wyśmiać wstrzykniętą usługę. Ale nie znalazłem sposobu na przetestowanie funkcji "Przybył" z mojego kontrolera. Oto mój jsfiddle: http://jsfiddle.net/2fwxS/Kontroler testowy z usługą wtrysku wewnątrz angularJS z jaśminem
controller.js:
angular.module('myApp.controllers', [])
.controller('MyCtrl', ['$scope', 'MyService', function ($scope, MyService) {
$scope.User = {};
$scope.HasUserArrived = false;
$scope.Arrived = function(firstname, lastname) {
$scope.HasUserArrived = MyService.Arrive(firstname, lastname);
return $scope.HasUserArrived;
}
}]);
services.js:
var myApp = angular.module('myApp.services', []).
value('version', '0.1');
myApp.factory('MyService', [function() {
return {
HasArrived: false,
Arrive: function (firstname, lastname) {
this.HasArrived = false;
if (firstname && lastname) {
this.HasArrived = true;
}
console.log("User has arrived: " + this.HasArrived);
return this.HasArrived;
}
}
}]);
znalazłem kilka podobnych wyjaśnień gdzie $ dostarczają może być poprawne rozwiązanie (How can I write jasmine test for angular controller and service like this?) lub createSpy (How do you mock Angular service that is a function?), ale nie byłem w stanie zrozumieć, kiedy potrzebuję $ provider.factory lub $ provider.value lub kiedy powinienem użyć createSpy?
Byłbym wdzięczny, gdyby ktoś mógł mi pomóc zrozumieć różnice i dostaje kod wyłączona w moim jsFiddle (http://jsfiddle.net/2fwxS/) przykład uruchomiony ...
Przepraszam za spóźnioną odpowiedź! @Michael Dziękuję za odpowiedź i poprawiony jsFiddle. Dzięki tym małym zmianom udało mi się pomyślnie przeprowadzić testy! Naprawdę dobrze byłoby wiedzieć, dlaczego fabryka nie działa. – burgerS
A mój współpracownik i ja jesteśmy zainteresowani, jeśli istnieje sposób na sprawdzenie usługi w tym przykładzie zamiast drwić z usługi. Wiemy, że powinniśmy przetestować usługę osobno, ale zastanawialiśmy się, czy testowanie usługi w tym przykładzie mogłoby być możliwe ... – burgerS
Możesz uciec z kpiny z usługi, aby przetestować kontroler, jeśli usługa jest bardzo prosta i możesz bezpiecznie przewidzieć jego zachowanie, minimalizując szanse na przerwanie testów kontrolera z powodu błędu w realizacji usługi. Ale jeśli to zrobisz, będziesz testował kontroler, a nie usługę. Powinieneś przetestować usługę osobno, aby upewnić się, że działa tak, jak powinna. –