Espionner un appel de méthode de service en utilisant des espions de jasmin
J'ai le contrôleur suivant ViewMeetingCtrl.js
(function () {
'use strict';
angular.module('MyApp').controller('ViewMeetingCtrl', ViewMeetingCtrl);
ViewMeetingCtrl.$inject = ['$scope', '$state', '$http', '$translate', 'notificationService', 'meetingService', '$modal', 'meeting', 'attachmentService'];
function ViewMeetingCtrl($scope, $state, $http, $translate, notificationService, meetingService, $modal, meeting, attachmentService) {
$scope.meeting = meeting;
$scope.cancelMeeting = cancelMeeting;
function cancelMeeting(meetingId, companyId) {
meetingService.sendCancelNotices(companyId, meetingId)
.success(function () {
$state.go('company.view');
});
}
}
})();
J'ai pu succussfully invoquer la spyOn pour cancelMeeting() mais pas avec la vocation de sendCancelNotices méthode. Ce que je veux faire , je veux tester que chaque fois que cancelMeeting() est appelée , elle appelle sendCancelNotices() méthode . Je sais que je devrais aller avec createSpy méthode pour ce faire . Mais je ne suis pas sûr de savoir comment faire .
Ci-dessous est le cas de test ViewMeetingCtrlSpec.js
describe('ViewMeetingCtrl CreateSpy --> Spying --> cancelMeeting', function () {
var $rootScope, scope, $controller , $q ;
var sendCancelNoticesSpy = jasmine.createSpy('sendCancelNoticesSpy');
beforeEach(angular.mock.module('MyApp'));
beforeEach(inject(function ($rootScope, $controller ) {
scope = $rootScope.$new();
createController = function() {
return $controller('ViewMeetingCtrl', {
$scope: scope,
meeting : {}
});
};
var controller = new createController();
}));
it("tracks that the cancelMeeting spy was called", function() {
//some assertion
});
});
source d'informationauteur Malik
Vous devez vous connecter pour publier un commentaire.
Je voudrais vous encourager à cesser de compter de HTTP promet d'être renvoyé de services. Au lieu de cela, il suffit de considérer le service retourne une promesse. Ceux-ci sont plus facile de se moquer, et de ne pas vous obliger à réécrire votre contrôleur de code lorsque vous n'avez pas de retour HTTP promet plus.
Dans votre contrôleur:
Dans votre test: