angularjs – 间谍服务方法调用使用茉莉花间谍
发布时间:2020-12-17 07:38:23 所属栏目:安全 来源:网络整理
导读:我有以下控件ViewMeetingCtrl.js (function () { 'use strict'; angular.module('MyApp').controller('ViewMeetingCtrl',ViewMeetingCtrl); ViewMeetingCtrl.$inject = ['$scope','$state','$http','$translate','notificationService','meetingService','$m
|
我有以下控件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');
});
}
}
})();
我能够成功地调用了用于cancelMeeting()的spyOn,但是没有调用sendCancelNotices方法.我想做的是,我想测试当cancelMeeting()被调用时,它调用sendCancelNotices()方法.我知道我应该用createSpy方法去做.但我不知道该怎么做 下面是测试用例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
});
});
describe('ViewMeetingCtrl',function () {
var scope,meetingService;
beforeEach(angular.mock.module('MyApp'));
beforeEach(inject(function ($rootScope,_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承诺.相反,只要考虑服务返回承诺.那些更容易嘲笑,并且不再强制您在不再返回HTTP承诺时重写控制器代码. 在你的控制器中: 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');
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
