0

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

我该怎么做,请帮忙。

4

1 回答 1

1

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

因为实际上您通过在没有_localService函数的情况下返回 myService 将其设为私有。

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

如果你想保密,那么,

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

于 2015-01-18T12:03:14.997 回答