为什么使用spyOn而不是jasmine.createSpy?

时间:2017-07-13 07:18:50

标签: jasmine

之间有什么区别
  

jasmine.createSpy( '的someMethod')

  

spyOn(someObject,'someMethod')

为什么要选择使用spyOn?

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

2 个答案:

答案 0 :(得分:25)

区别在于你应该在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 :(得分:6)

除了另一个好的答案:

  • 使用spyOn()间谍(拦截)对象上的现有方法,以跟踪对其的模块的调用。
  • 使用jasmine.createSpy()创建一个可以作为回调传递的函数或Promise处理程序来跟踪回叫。