如何测试$ service中的AngularJS私有方法是否被调用?我将不胜感激任何帮助。
angular.module('login')
.service('EventService', [ '$http', '$log', function ($http, $log) {
function sendEvent(category, action, label, value, customParams) {
//
}
return {
sendLoginPageEvent: function (action, customParams) {
if (!customParams) {
customParams = {};
}
customParams.template = 'templateName';
sendEvent('LoginPage', action, null, null, customParams);
},
};
}]);
我有一些像这样的测试,但似乎不起作用:
describe('Test of Cookie Monster service', function() {
var EventService;
var sendEventSpy = jasmine.createSpy('eventSpy');
beforeEach(module(function($provide) {
$provide.value("event", sendEventSpy);
}));
beforeEach(inject(function (_EventService_) {
EventService = _EventService_;
}));
it('send cookie event', function() {
EventService.sendLoginPageEvent('action')
expect(event.sendEvent)
.toHaveBeenCalledWith('LoginPage', 'action', {template: 'templateName'})
});
});
这是否是以这种方式测试服务的正确方法?我刚刚开始测试前端,所以我会感激任何建议。
答案 0 :(得分:1)
这不是私有方法,这是本地函数。变量在定义它们的范围之外不可用,这可用于在JS中实现Module模式。
为了可测试,应将其定义为服务方法:
this.sendEvent = ...
然后它可以像任何其他方法一样被发现:
spyOn(EventService, 'sendEvent').and.callThrough()