개요
회사에서 에러 로그 수집 시스템으로 Sentry를 사용하고 있다.
백엔드 테스트 코드 작성중, Sentry를 Mocking할 필요가 생겼고, 약간의 삽질도 한 겸, 정리해본다.
우리 회사는 Nest.js 백엔드를 사용하고 있다.
따라서 아래 문서는 Nest.js를 기준으로 설명한다.
How to
우리는 Sentry를 위해 @ntegral/nestjs-sentry 패키지를 사용하고 있다.
테스트 코드에서 아래와 같이 mocking을 할 수 있다.
# some.service.spec.ts
import { SENTRY_TOKEN, SentryService } from '@ntegral/nestjs-sentry';
import { MockSentryService } from '{path}/sentry.service.mock';
describe('SomeService', () = {
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
SentryService,
{
provide: SENTRY_TOKEN,
useValue: MockSentryService,
},
],
}).compile();
});
});
MockSentryService의 구현체는 다음과 같다.
import * as Sentry from '@sentry/node';
jest.mock('@sentry/node');
jest.spyOn(Sentry, 'captureException').mockImplementation();
export const MockSentryService = {
instance: () => Sentry,
captureException: Sentry.captureException as jest.MockedFunction<typeof Sentry.captureException>,
};
이렇게 하면 Sentry의 captureException 함수를 모킹할 수 있다.
감상
요즘 일이 많아서 정신이 없어서 그런가... 이런 간단한 문제를 한참 헤맸다.
참고로 @sentry/node 를 직접 쓰는 경우, 더 간단히 모킹이 가능하다.
'개발공부 > NestJS' 카테고리의 다른 글
[Jest] 테스트에서 Logger 배제하기 (0) | 2022.06.25 |
---|---|
[NestJS] Controller로 Request를 받아보자! (0) | 2021.09.11 |
[NestJS] Modules & Controllers & Providers (3) (0) | 2021.09.11 |
[NestJS] Modules & Controllers & Providers (2) (0) | 2021.09.11 |
[NestJS] Modules & Controllers & Providers (1) (0) | 2021.09.10 |