用笑话对函数进行存根

时间:2019-03-01 17:21:23

标签: javascript jestjs

我正在尝试对函数的功能进行存根(嗯,我确实需要对两者都存根)

这是一个例子

return res.foo(100).bar(aVar)

这是我的测试模拟的样子

let res = {
    foo: ()=> jest.fn( {bar:()=> jest.fn()})
}

但是,在运行测试时,出现错误“ TypeError:res.foo(...)。bar不是函数”

1 个答案:

答案 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
})