在typescript中使用jest的模拟工厂

在typescript中使用jest的模拟工厂,typescript,unit-testing,jestjs,winston,Typescript,Unit Testing,Jestjs,Winston,我想使用Jest创建一个模拟记录器实例 这样,我就可以使用依赖项注入来监视调用了多少次logger.warning(),以及出现了什么错误消息 但是,由于winston使用工厂方法createLogger(),因此在jest.mock(“winston”)上执行自动模拟时,它将使我调用createLogger()返回未定义 这是我的密码: 从“/./../src/PeriodicTask/VoiceChannelDisconnect”导入{VoiceChannelDisconnect}”; 从“

我想使用Jest创建一个模拟记录器实例

这样,我就可以使用依赖项注入来监视调用了多少次
logger.warning()
,以及出现了什么错误消息

但是,由于winston使用工厂方法
createLogger()
,因此在
jest.mock(“winston”)
上执行自动模拟时,它将使我调用
createLogger()
返回未定义

这是我的密码:

从“/./../src/PeriodicTask/VoiceChannelDisconnect”导入{VoiceChannelDisconnect}”;
从“winston”导入{Logger,createLogger};
从“discord.js”导入{VoiceChannel,GuildMember,Collection};
开玩笑的模仿(“温斯顿”);
开玩笑的模仿(“discord.js”);
const MockedVoiceChannel=作为jest.Mock的VoiceChannel;
让voiceChannel=new MockedVoiceChannel();
让logger=createLogger();
让voiceChannelDisconnect=新的voiceChannelDisconnect(voiceChannel,记录器);
它(“当通道中没有人时返回true”,()=>{
voiceChannel=新的MockedVoiceChannel();
voiceChannel.members=新集合();
logger=createLogger();
logger.warning=jest.fn();
voiceChannelDisconnect=新的voiceChannelDisconnect(voiceChannel,记录器);
expect(voiceChannelDisconnect.execute()).toBe(true);
预期(记录器。警告)。等待调用时间(1);
});
运行测试将产生:

    TypeError: Cannot set property 'warning' of undefined

      15 | 
      16 |   logger = createLogger();
    > 17 |   logger.warning = jest.fn();
如何创建仍然满足Typescript类型检查的模拟
记录器
实例


提前感谢

我通过修改呈现的问题解决了此问题

这样说:

jest.mock("winston", () => ({
  createLogger: jest.fn().mockReturnValue({
    debug: jest.fn(),
    warning: jest.fn()
  })
}));
在测试的顶部,
createLogger
,我现在可以跟踪调用了多少次
logger.warning