[typescript] 타입스크립트와 Jest에서의 테스트 코드 리팩토링 방법

테스트 코드는 소프트웨어 개발에서 매우 중요한 부분입니다. 테스트 코드의 품질을 높이고 유지 보수성을 향상하기 위해 테스트 코드를 리팩토링하는 것은 좋은 관행입니다. 이번 글에서는 타입스크립트와 Jest를 사용하여 테스트 코드를 리팩토링하는 방법에 대해 알아보겠습니다.

1. 중복 코드 제거

테스트 코드에서 중복된 부분은 유지 보수를 어렵게 하고 가독성을 해치므로 제거해야 합니다. Jest의 beforeEachbeforeAll을 사용하여 반복되는 테스트 설정 코드를 제거할 수 있습니다.

beforeEach(() => {
  // common setup code
});

2. 테스트 케이스 그룹화

비슷한 성격을 가진 테스트 케이스들을 그룹화하여 가독성을 높일 수 있습니다. Jest의 describe 블록을 활용하여 테스트 케이스들을 그룹화할 수 있습니다.

describe('User management', () => {
  test('should create a new user', () => {
    // test code
  });

  test('should update user information', () => {
    // test code
  });
});

3. 테스트 더미화

특정 기능에 의존하는 테스트 케이스는 해당 기능을 더미(mock)화하여 독립적으로 테스트할 수 있도록 합니다. Jest의 jest.fn()을 통해 함수를 더미화할 수 있습니다.

jest.mock('../api/userApi', () => ({
  getUserInfo: jest.fn().mockResolvedValue({ name: 'Mock User' }),
}));

4. 비동기 코드 처리

비동기 코드를 테스트할 때는 async/await를 사용하여 코드를 동기적으로 작성할 수 있습니다. 또는 Jest의 resolvesrejects를 통해 비동기 코드의 성공과 실패를 테스트할 수 있습니다.

test('should fetch user data', async () => {
  await expect(fetchUserData()).resolves.toEqual({ name: 'Mock User' });
});

5. 모듈화

중복된 테스트 코드는 모듈로 분리하여 재사용성을 높일 수 있습니다. Jest는 setupFilessetupFilesAfterEnv를 통해 테스트 환경을 설정할 때 모듈을 활용할 수 있습니다.

// testSetup.ts
export const setupTestData = () => {
  // setup test data
};

// test file
import { setupTestData } from './testSetup';

beforeAll(() => {
  setupTestData();
});

테스트 코드 리팩토링은 코드의 유지 보수성을 높이고 개발 생산성을 향상시킵니다. 타입스크립트와 Jest를 사용하여 효율적인 테스트 코드를 작성하고 유지 보수하는 방법을 숙지하여 효율적인 테스트 코드를 작성해보시기 바랍니다.

참고 자료