如何使用玩笑嘲笑第三方库 [英] How to mock third party library using jest
本文介绍了如何使用玩笑嘲笑第三方库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用nestjs
开发一个node.js
应用程序
我有一个叫做LoggerService
的类,如下所示
I am developing a node.js
application using nestjs
I have a class called LoggerService
as below
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;
}
现在,我正在使用下面的笑话为此类编写单元测试.
Now I am writing unit test for this class using jest as below.
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
.
My question is how to check(expect) if logger.error
is called, or how to mock Rollbar
in this class.
推荐答案
1)在模块中提供外部依赖项/库作为可注入令牌
1) Provide your external dependency/library as an injectable token in your module
@Module({
providers: [
{
provide: 'Rollbar',
useFactory: async (configService: ConfigService) => new Rollbar({
accessToken: configService.accessToken,
environment: configService.environment,
captureUncaught: true,
captureUnhandledRejections: true,
}),
inject: [ConfigService],
},
]
2)将其注入您的LoggerService
中,而不是创建它
2) Inject it in your LoggerService
instead of creating it
export class LoggerService {
constructor(@Inject('Rollbar') private logger: Rollbar) {
}
3)现在,您可以在测试中模拟依赖项
3) Now you can mock your dependency in your test
const module: TestingModule = await Test.createTestingModule({
providers: [
LoggerService,
{ provide: 'Rollbar', useFactory: rollbarMockFactory },
],
}).compile();
这篇关于如何使用玩笑嘲笑第三方库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文