使用Jasmine监视AngularJS服务中的私有函数

时间:2013-11-26 20:35:08

标签: javascript unit-testing angularjs testing jasmine

我有一个具有私有函数myFactory的工厂foo工厂返回一个具有两个属性的对象:foo - 设置为私有函数,{{1} }设置为foo_alias

我试图通过 function(){ foo() }使用Jasmine间谍监视私人函数foo并查看是否通过spyOn(myFactory, 'foo')调用它。我认为,因为所有内容都指向原始的私有函数foo_alias,调用别名应该触发间谍 - 即foo,但这不起作用。

显示此问题的傻瓜在这里:http://plnkr.co/edit/i032kHYToe5sGml0Mnqn?p=preview

我真的很感激这方面的一些帮助以及通过别名测试私有函数的任何建议。具体来说,我有一堆方便的方法,我想确保使用正确的参数调用内部函数。

1 个答案:

答案 0 :(得分:9)

要实现您的目标,您只需foo_alias拨打this.foo()

原因是在调用spyOn()之后,myFactory.foo被包装并被包装函数替换,即myFactory.foo === wrapped_fn。茉莉花使用“wrapped_fn”来“窥探”一个函数。但是,myFactory.foo_alias仍在调用原始foo(),而不是间谍功能。因此,expect(myFactory.foo).toHaveBeenCalled()会引发错误。

如果您改为foo_alias拨打this.foo(),则会调用myFactory.foo()的正确版本。