wli*_*gke 1 javascript testing unit-testing jasmine angularjs
我有一个myFactory具有私有函数foo的工厂工厂返回一个具有两个属性的对象:foo- 设置为私有函数,并foo_alias设置为
function(){ foo() }
我试图通过以下方式使用Jasmine Spies监视私有函数foo:spyOn(myFactory, 'foo')并查看它是否被调用foo_alias.我认为既然一切都指向原始的私有函数foo,那么调用别名应该触发间谍 - 即expect(myFactory.foo).toHaveBeenCalled()但这不起作用.
一个显示这个问题的傻瓜在这里:http://plnkr.co/edit/i032kHYToe5sGml0Mnqn?p = preview
我真的很感激这方面的一些帮助以及通过别名测试私有函数的任何建议.具体来说,我有一堆方便的方法,我想确保使用正确的参数调用内部函数.
要达到你想要的效果,你只需要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().