监视本地函数 Angular 服务

Spy on a local function Angular Service

我有一个 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();

我该怎么做,请帮忙。

你必须在你的服务中暴露 _localService 否则间谍找不到它。

因为实际上您通过返回 myService 而不使用 _localService 函数将其设为私有。

因此您可以将其设为私有,或者设为 public,如果它是 public,它将按原样工作。

如果你想保密,那么,

你不应该测试私有函数,而是测试你期望调用 public 函数的结果。它将允许重构内部实现,并且仍然有测试来检查您的代码是否有效。