为什么要用spyOn代替jasmine.createSpy?

问题描述:

是什么为什么要用spyOn代替jasmine.createSpy?

jasmine.createSpy( '的someMethod')

而且

spyOn(someObject '的someMethod')

为什么之间的区别应该选择使用spyOn吗?

我的猜测是,第一个替代方法将匹配someMethod方法,无论它包含哪个对象,但spyOn只会匹配它包含在someObject中。因此,使createSpy只是一个更通用的匹配器?

+0

嘿,没有[我的回答](https://stackoverflow.com/a/45074442/2545680)有帮助吗? –

不同的是,你应该有对象的方法与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,谢谢你的补充) –

此外,对于其它精细答案:

  • 使用spyOn()窥探(截距)的对象上的现有的方法来跟踪其他模块,以它的呼叫。
  • 使用jasmine.createSpy()创建一个函数,该函数可以作为回调或Promise处理函数传递以跟踪回调。