间谍本地函数Angular Service

时间:2015-01-16 14:50:45

标签: unit-testing jasmine angular-services spy spyon

我有一个使用本地函数的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();

我怎么能这样做,请帮助。

1 个答案:

答案 0 :(得分:1)

您必须在服务中公开_localService,否则间谍无法找到它。

因为事实上你通过在没有_localService函数的情况下返回myService来使其成为私有的。

因此,您可以将其保密,或将其公开,如果它是公开的,它将按原样运作。

如果你想把它保密,那么,

你不应该测试私有函数,而是测试你对公共函数调用的结果。它将允许重构内部实现,并仍然进行测试以检查您的代码是否正常工作。