2017-07-13 102 views
6

是什麼爲什麼要用spyOn代替jasmine.createSpy?

jasmine.createSpy( '的someMethod')

而且

spyOn(someObject '的someMethod')

爲什麼之間的區別應該選擇使用spyOn嗎?

我的猜測是,第一個替代方法將匹配someMethod方法,無論它包含哪個對象,但spyOn只會匹配它包含在someObject中。因此,使createSpy只是一個更通用的匹配器?

+0

嘿,沒有[我的回答](https://stackoverflow.com/a/45074442/2545680)有幫助嗎? –

回答

11

不同的是,你應該有對象的方法與spyOn

const o = { some(): { console.log('spied') } }; 
spyOn(o, 'some'); 

,同時爲您創建了createSpy()模擬方法:

const o = {}; 
o.some = jasmine.createSpy('some'); 

spyOn的優點是,您可以撥打原始方法:

spyOn(o, 'some').and.callThrough(); 
o.some(); // logs 'spied' 

而@estus說,在spyOn的情況下,測試後恢復原始方法。這應該在重新分配時手動完成。

+1

更重要的是,原始方法在'spyOn'情況下的測試後恢復。這應該在使用'o.some ='重新分配時手動完成。 – estus

+0

@estus,謝謝你的補充) –

1

此外,對於其它精細答案:

  • 使用spyOn()窺探(截距)的對象上的現有的方法來跟蹤其他模塊,以它的呼叫。
  • 使用jasmine.createSpy()創建一個函數,該函數可以作爲回調或Promise處理函數傳遞以跟蹤回調。