[英]Using Jasmine to spy on a private function in an AngularJS service
我有一個具有私有函數foo
的工廠myFactory
該工廠返回一個具有兩個屬性的對象: foo
設置為私有函數, foo_alias
設置為function(){ foo() }
我正在嘗試使用Jasmine Spies通過以下方式spyOn(myFactory, 'foo')
私有函數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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.