【发布时间】:2018-06-21 01:15:10
【问题描述】:
有什么区别
jasmine.createSpy('someMethod')
和
spyOn(someObject, 'someMethod')
为什么要选择使用 spyOn?
我的猜测是,第一个替代方法将匹配方法 someMethod,无论它包含在什么对象中,但 spyOn 仅在它包含在 someObject 中时才会匹配。从而使 createSpy 只是一个更通用的匹配器?
【问题讨论】:
标签: jasmine
有什么区别
jasmine.createSpy('someMethod')
和
spyOn(someObject, 'someMethod')
为什么要选择使用 spyOn?
我的猜测是,第一个替代方法将匹配方法 someMethod,无论它包含在什么对象中,但 spyOn 仅在它包含在 someObject 中时才会匹配。从而使 createSpy 只是一个更通用的匹配器?
【问题讨论】:
标签: jasmine
不同的是你应该在对象上有一个方法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 的情况下,测试后将恢复原始方法。这应该在重新分配时手动完成。
【讨论】:
spyOn的情况下,测试后恢复原始方法。这应该在使用o.some = 重新分配时手动完成。
spyOn 时,it() 执行后会恢复被窥探方法的原始实现吗?
除了其他很好的答案:
spyOn() 监视(拦截)对象上的现有方法,以跟踪其他模块对其的调用。jasmine.createSpy() 创建一个可以作为回调传递的函数或Promise 处理程序来跟踪回调。【讨论】: