如何监视另一个函数中使用的函数?

How to spy on a function used in another function?

我有一个包含源代码的文件 foo.ts 和一个名为 foo.test.ts

的测试文件
foo.ts
function bar(argument: arg): boolean {
  return true
}

async function foo(argument: arg) {
  if (bar(argument)) {
    await promiseRequest()
  }
}

我正在尝试以这样一种方式对 bar() 进行存根,即当调用 foo(argument)bar() returns false。

我浏览了 Jest documentation 并尝试根据那里的方法实施,但是当我在 foo.test.ts 文件中调用 foo(argument) 时它们不起作用。

我该怎么做?

不可能对在定义的同一模块中使用的函数执行此操作,除非它是一种可以在对象上进行监视的方法。

foobar需要一起测试,或者拆分到不同的模块用jest.mock.

mock

你可以为此使用依赖注入。

foo.ts
function bar(argument: arg): boolean {
  return true
}
    
async function foo(argument, bar = bar) {
  if (bar(argument)) {
    await promiseRequest()
  }
}

export const Foo = {
  bar,
  foo
}

然后在你的测试文件中你可以mock/stub bar()以下方式:

foo.test.ts
test('Test for foo()', () => {
  const mockBar = jest.fn().mockReturnValue(value)
  expect(Foo.foo(arg, mockBar)).toBe(expectation)
})