[Jest] 테스트에서 Logger 배제하기

개요

테스트를 진행하다보니 쓸데없는 로그가 찍히는 경우가 생겼다.

특히 문제가 되는 건 아래와 같이 로그를 사용할 때였다.

# some.service.ts

import { Injectable, Logger } from '@nestjs/common';

@Injectable()
export class SomeService {
  private readonly logger = new Logger(SomeService.name); 
}

How to

이것도 해결은 간단했는데, 생각보다 문서 찾는데 헤맸다.

# some.service.spec.ts

import { MockLogger } from '{path}/logger.service.mock';

describe('SomeService', () = {
  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      ...
    })
      .setLogger(new MockLogger())
      .compile();
  });
});

MockLogger의 구현도 간단하다.

# logger.service.mock.ts

import { LoggerService } from '@nestjs/common';

export class MockLogger implements LoggerService {
  error(message: any, ...optionalParams: any[]): any {
    // do nothing
  }

  log(message: any, ...optionalParams: any[]): any {
    // do nothing
  }

  warn(message: any, ...optionalParams: any[]): any {
    // do nothing
  }
}

이제 테스트 과정에서 쓸데없는 로그를 보지 않아도 된다.