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

Pay*_*erl 24 jasmine

有什么区别

jasmine.createSpy( '的someMethod')

spyOn(someObject,'someMethod')

为什么要选择使用spyOn?

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

Max*_*kyi 30

不同之处在于你应该在对象上有一个方法 spyOn

const o = { some(): { console.log('spied') } };
spyOn(o, 'some');
Run Code Online (Sandbox Code Playgroud)

而mock方法是为你创建的createSpy():

const o = {};
o.some = jasmine.createSpy('some');
Run Code Online (Sandbox Code Playgroud)

这样做的好处spyOn是你可以调用原始方法:

spyOn(o, 'some').and.callThrough();
o.some(); // logs 'spied'
Run Code Online (Sandbox Code Playgroud)

正如@estus所说,原始方法在测试后恢复spyOn.这应该在重新分配时手动完成.

  • 更重要的是,在"spyOn"的情况下,在测试之后恢复原始方法.这应该在用`o.some =`重新分配时手动完成. (3认同)

try*_*lly 8

除了其他好的答案:

  • 使用spyOn()窥探(截距)的现有方法在物体上以跟踪其他模块,以它的呼叫.
  • 使用jasmine.createSpy()来创建可作为回调或传递函数无极处理程序来跟踪回调.