Ответ 1
describe('ViewMeetingCtrl', function () {
var scope, meetingService;
beforeEach(angular.mock.module('MyApp'));
beforeEach(inject(function ($rootScope, $controller, _meetingService_) {
scope = $rootScope.$new();
meetingService = _meetingService_;
$controller('ViewMeetingCtrl', {
$scope: scope,
meeting : {}
});
}));
it('should send cancel notices whan cancelMeeting is called', function() {
var fakeHttpPromise = {
success: function() {}
};
spyOn(meetingService, 'sendCancelNotices').andReturn(fakeHttpPromise);
scope.cancelMeeting('foo', 'bar');
expect(meetingService.sendCancelNotices).toHaveBeenCalledWith('bar', 'foo');
});
});
Я бы посоветовал вам перестать полагаться на HTTP promises, возвращаемый из служб. Вместо этого просто подумайте, что сервис возвращает обещание. Это проще высмеять и не заставит вас переписать код вашего контроллера, если вы больше не возвращаете HTTP promises.
В вашем контроллере:
function cancelMeeting(meetingId, companyId) {
meetingService.sendCancelNotices(companyId, meetingId)
.then(function () {
$state.go('company.view');
});
}
В вашем тесте:
var fakePromise = $q.when();
spyOn(meetingService, 'sendCancelNotices')and.returnValue(fakePromise);
scope.cancelMeeting('foo', 'bar');
expect(meetingService.sendCancelNotices).toHaveBeenCalledWith('bar', 'foo');