【问题标题】:How to spy on a function used in another function?如何监视另一个函数中使用的函数?
【发布时间】:2020-11-21 17:29:22
【问题描述】:

我有一个包含源代码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() 返回 false。

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

我该怎么做?

【问题讨论】:

    标签: typescript testing mocking jestjs stub


    【解决方案1】:

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

    foobar 需要一起测试,或者他们应该被拆分到不同的模块并用jest.mock 模拟。

    【讨论】:

      【解决方案2】:

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

      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
      }
      

      然后在您的测试文件中,您可以通过以下方式模拟/存根bar()

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多