簡體   English   中英

使用Jasmine監視AngularJS服務中的私有函數

[英]Using Jasmine to spy on a private function in an AngularJS service

我有一個具有私有函數foo的工廠myFactory該工廠返回一個具有兩個屬性的對象: foo設置為私有函數, foo_alias設置為function(){ foo() }

我正在嘗試使用Jasmine Spies通過以下方式spyOn(myFactory, 'foo')私有函數foospyOn(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM