jest.mock

이건선·2023년 5월 21일
0

해결

목록 보기
38/48
post-custom-banner

문제점 : 테스트 코드의 일부분 중 API를 호출 하는 부분에서 401 오류가 발생했다

const configuration = new Configuration({
      organization: process.env.OPENAI_OG,
      apiKey: process.env.OPENAI_APIKEY,
    });

 const openai = new OpenAIApi(configuration);

시도해본 것 : 환경변수를 BeforeEach로 테스트 코드에 집어 넣고 실행시키면 작동했다. 하지만 이렇게 하는것은 mock 데이터를 사용하는 유닛테스트에서 옳지 않다고 생각했고 어떻게 하면 mock 데이터를 가져올 수 있을까 고민했다.

해결 : 우선 OpenAIApi를 코드에서 분리해서 메서드로 만들고 그것을 this로 가져온다.

  /**
   * test : OpenAI 테스트입니다.
   * @returns
   */
  getOpenAIApiInstance(): OpenAIApi {
    const configuration = new Configuration({
      organization: process.env.OPENAI_OG,
      apiKey: process.env.OPENAI_APIKEY,
    });

    return new OpenAIApi(configuration);
  }

...

 const openai = this.getOpenAIApiInstance();

그리고 jest.mock을 사용해 OpenAIApi 전체를 모의한다.

jest.mock('openai', () => {
  return {
    OpenAIApi: jest.fn().mockImplementation(() => {
      return {
        createCompletion: jest.fn().mockImplementation(() => {
          return Promise.resolve({
            data: {
              choices: [
                {
                  text: 'Mocked AI response',
                },
              ],
            },
          });
        }),
      };
    }),
    Configuration: jest.fn().mockImplementation(() => {
      return {
       
      };
    }),
  };
});
  • 이 방법으로 OpenAIApi의 모든 메소드를 가짜로 만들 수 있으며, 테스트에서 필요한 메소드만 특정 동작을 수행하도록 설정할 수 있다.

  • jest.mock이 'openai' 모듈 전체를 모의하므로, 이제 OpenAIApi 인스턴스는 Jest에 의해 자동으로 제공된다.


jest.mock

jest.mock은 Jest 테스팅 프레임워크의 기능 중 하나로, 특정 모듈의 모의 구현(mock implementation)을 제공하는데 사용된다. 이는 테스트 환경에서 실제 모듈 대신 사용할 수 있는 가짜 모듈을 생성하는 것이다.

  • jest.mock는 두 가지 인수를 받는다.

    문자열로 된 모듈 경로: 이 경로는 모의화하려는 모듈을 가리킨다.

    함수: 이 함수는 모듈의 모의 구현을 반환한다. 이 인수는 선택 사항이며, 제공되지 않으면 Jest는 모듈의 자동 모의(즉, 모든 함수가 가짜 함수로 대체되는 모듈)를 생성한다.

profile
멋지게 기록하자
post-custom-banner

0개의 댓글