You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jest-TS基于Logger接口快速创建Mock函数?

用Jest内置工具快速搞出Azure Functions的Logger Mock

直接用jest.fn()+对象组合就行

你要的只是个符合接口的空实现,不用验证调用,完全没必要用第三方包,Jest自带的工具足够搞定。

第一步:搞个通用空函数

先弄个空函数,所有Logger的方法都复用它:

const noop = jest.fn();

第二步:拼出符合Logger接口的log对象

Logger接口比较特殊,既是个函数,又带error/warn这些方法,用Object.assign把空函数和方法属性拼一起就行:

const mockLogger = Object.assign(noop, {
  error: noop,
  warn: noop,
  info: noop,
  verbose: noop,
}) as jest.Mocked<Logger>;

第三步:组装Context对象

把上面的mockLogger塞到Context里,按需加其他你需要的属性:

const mockContext = {
  log: mockLogger,
  // 比如bindingData、req这些属性,需要的话加空值或mock就行
} as unknown as Context;

嫌麻烦?一步到位的写法

不想拆步骤的话,直接写在一起:

const mockContext = {
  log: Object.assign(jest.fn(), {
    error: jest.fn(),
    warn: jest.fn(),
    info: jest.fn(),
    verbose: jest.fn(),
  }) as jest.Mocked<Logger>,
} as unknown as Context;

为啥这方法好使?

  • jest.fn()本身就是空函数,调用不会报错,完全满足你“只要有效函数”的需求
  • Object.assign刚好能解决Logger既是函数又是对象的特殊结构问题
  • 类型断言能让TypeScript不报错,编译顺利通过

内容的提问来源于stack exchange,提问作者Martijn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:20:33