我正在尝试对函数的功能进行存根(嗯,我确实需要对两者都存根)
这是一个例子
return res.foo(100).bar(aVar)
这是我的测试模拟的样子
let res = {
foo: ()=> jest.fn( {bar:()=> jest.fn()})
}
但是,在运行测试时,出现错误“ TypeError:res.foo(...)。bar不是函数”
答案 0 :(得分:2)
您已经关闭。
只需进行三个更改:
jest.fn()
返回一个函数,因此不需要将其包装在函数中jest.fn()
采用可选的实现参数,该参数应该是 function bar
,请在foo
的模拟实现中返回同一个间谍,否则每次都会创建一个新的bar
间谍foo
被调用。所以您的模拟应如下所示:
const barSpy = jest.fn();
let res = { foo: jest.fn(() => ({ bar: barSpy })) };
这是一个工作示例:
const func = (res, aVar) => {
return res.foo(100).bar(aVar);
}
test('stub chained functions', () => {
const barSpy = jest.fn(() => 'the result');
const res = { foo: jest.fn(() => ({ bar: barSpy })) };
const result = func(res, 'a var');
expect(res.foo).toHaveBeenCalledWith(100); // SUCCESS
expect(barSpy).toHaveBeenCalledWith('a var'); // SUCCESS
expect(result).toBe('the result'); // SUCCESS
})