我有一个使用本地函数的Angular服务并执行以下工作:
function myService($http,$q){
var myService = {};
var _localService = function (Table) {
return Table.something;
}
var _getSomething = function () {
return _localService('someTable');
}
var _getSomethingElse = function () {
return _localService('someTable2');
}
myService.getSomething = _getSomething ;
myService.getSomethingElse = _getSomethingElse ;
return myService ; }
现在我想用jasmine测试我的服务,我想测试是否已调用localService。 像这样:
spyOn(myService,"_localService");
myService.getSomething();
expect(myService._localService).toHaveBeenCalled();
我怎么能这样做,请帮助。
答案 0 :(得分:1)
您必须在服务中公开_localService
,否则间谍无法找到它。
因为事实上你通过在没有_localService
函数的情况下返回myService来使其成为私有的。
因此,您可以将其保密,或将其公开,如果它是公开的,它将按原样运作。
如果你想把它保密,那么,
你不应该测试私有函数,而是测试你对公共函数调用的结果。它将允许重构内部实现,并仍然进行测试以检查您的代码是否正常工作。