gpt4 book ai didi

javascript - 如何使用 Jest 模拟第三方库

转载 作者:行者123 更新时间:2023-11-30 19:21:47 25 4
gpt4 key购买 nike

我正在使用 nestjs 开发一个 node.js 应用程序我有一个名为 LoggerService 的类,如下所示

export class LoggerService {

private logger: Rollbar;

constructor() {
this.logger = this.setupLogger();
}

critical(...args: Array<string | Error | object | Date | any[]>) {
this.logger.error(...args);
}

private setupLogger(): Rollbar {
if (this.logger == null) {

this.logger = new Rollbar({
accessToken: 'token',
environment: 'dev',
captureUncaught: true,
captureUnhandledRejections: true,
});

}

return this.logger;
}

现在我正在使用 jest 为这个类编写单元测试,如下所示。

describe('LoggerService.log', () => {
let service: LoggerService;

beforeEach(async () => {

const module: TestingModule = await Test.createTestingModule({
providers: [LoggerService],
}).compile();

service = module.get<LoggerService>(LoggerService);
});

it('critical', () => {
service.critical('error','message');
expect(???).toHaveBeenCalledWith('error', 'message')
})

);

我的问题是如何检查(预期)是否调用了 logger.error,或者如何在此类中模拟 Rollbar

最佳答案

1) 在您的模块中提供您的外部依赖项/库作为可注入(inject) token

@Module({
providers: [
{
provide: 'Rollbar',
useFactory: async (configService: ConfigService) => new Rollbar({
accessToken: configService.accessToken,
environment: configService.environment,
captureUncaught: true,
captureUnhandledRejections: true,
}),
inject: [ConfigService],
},
]

2) 将其注入(inject)您的 LoggerService 而不是创建它

export class LoggerService {
constructor(@Inject('Rollbar') private logger: Rollbar) {
}

3) 现在你可以在你的测试中模拟你的依赖

const module: TestingModule = await Test.createTestingModule({
providers: [
LoggerService,
{ provide: 'Rollbar', useFactory: rollbarMockFactory },
],
}).compile();

关于javascript - 如何使用 Jest 模拟第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com