Ser*_*lov 7 javascript unit-testing jasmine ecmascript-6
TL;博士:
aaa调用的函数bbb;bbb,但最终aaa称之为原始bbb功能,而不是间谍;我怎么强迫aaa打电话给间谍?
模块:
export function aaa() {
return bbb();
}
export function bbb() {
return 222;
}
Run Code Online (Sandbox Code Playgroud)
考试:
import * as util from 'my-module';
describe('aaa test', () => {
let bbbSpy: Spy;
beforeEach(() => {
bbbSpy = spyOn(util, 'bbb');
});
it('should return SPYED', () => {
bbbSpy.and.returnValue('SPYED!!');
const result = util.aaa();
expect(result).toEqual('SPYED!!'); // Doesn't work - still 222
});
});
Run Code Online (Sandbox Code Playgroud)
所以,基本上这不起作用.有人可以帮我吗?
PS我不想更改模块的代码,因为在这种情况下我将不得不改变项目中的大量代码.我需要一个通用的测试解决方案.
甚至认为不是同一框架,还有一个相关的问题向您提供了为什么这样不起作用:如何使用jest在同一模块中模拟函数。基本上,您将无法访问该功能的固定引用,而是明确指出该功能与模块上下文中的功能相同。
我知道这不能满足您在问题中发布的约束,但是这很明显地表明,使用间谍无法实现您想要的目标。
使用JavaScript,无法交换对某些内容的引用。您不能换出模块内部的功能。当您在示例中尝试使用spyOn.and.returnValue覆盖bbb时,您只是在测试中修改了本地绑定bbb,但对其他文件中的bbb绑定没有影响。