>웹 프론트엔드 >JS 튜토리얼 >Jest를 사용한 테스트에서 상수 모의: 실제 예

Jest를 사용한 테스트에서 상수 모의: 실제 예

Barbara Streisand
Barbara Streisand원래의
2025-01-11 08:53:42279검색

Mockando Constantes em Testes com Jest: Um Exemplo Prático

프로젝트에서 상수로 작업할 때 다양한 시나리오를 테스트하기 위해 값을 변경해야 하는 경우가 있습니다. 그러나 직접 가져온 상수는 쉽게 덮어쓸 수 없으므로 테스트 생성이 어려울 수 있습니다. 이 기사에서는 Jest를 사용하여 상수를 동적으로 모의하여 격리되고 안정적인 테스트를 보장하는 방법을 살펴보겠습니다.

프로덕션 환경에 있는지 여부에 따라 이미지 품질을 조정하는 adjustImageQuality라는 가상의 예를 만들어 보겠습니다.


구현

상수.js 파일

우리가 프로덕션 환경에 있는지 여부를 나타내는 IS_PRODUCTION이라는 상수를 정의합니다.

// constants.js
export const IS_PRODUCTION = false;

adjustImageQuality.js 파일

이제 adjustImageQuality 함수를 생성합니다. 시스템이 생산 중인 경우에만 이미지 품질이 변경됩니다.

// adjustImageQuality.js
import { IS_PRODUCTION } from "./constants";

export default function adjustImageQuality(img) {
  if (IS_PRODUCTION) {
    img.quality = 100; // Qualidade máxima em produção
  } else {
    img.quality = 50; // Qualidade reduzida em desenvolvimento
  }

  return img;
}

테스트 작성

프로덕션(IS_PRODUCTION = true) 및 개발(IS_PRODUCTION = false) 시나리오 모두에서 adjustImageQuality의 동작을 테스트하려고 합니다.

adjustImageQuality.test.js 파일

Jest를 사용하여 IS_PRODUCTION의 값을 동적으로 모의합니다. 비결은 jest.mock을 사용하고 사용자 정의 getter로 상수를 재정의하는 것입니다.

// adjustImageQuality.test.js
import adjustImageQuality from "./adjustImageQuality";

// Mock para a constante IS_PRODUCTION
const mockIsProduction = jest.fn();

jest.mock("./constants", () => {
  const constants = jest.requireActual("./constants");
  return {
    ...constants,
    get IS_PRODUCTION() {
      return mockIsProduction();
    },
  };
});

beforeEach(() => {
  mockIsProduction.mockClear(); // Limpa os mocks antes de cada teste
});

test("sets image quality to 100 in production", () => {
  // Configura o mock para retornar true (produção)
  mockIsProduction.mockReturnValue(true);

  const img = { quality: 0 };

  const result = adjustImageQuality(img);

  expect(result.quality).toEqual(100);
});

test("sets image quality to 50 in development", () => {
  // Configura o mock para retornar false (desenvolvimento)
  mockIsProduction.mockReturnValue(false);

  const img = { quality: 0 };

  const result = adjustImageQuality(img);

  expect(result.quality).toEqual(50);
});

모의설명

1. 모의 만들기

jest.mock을 사용하여 상수 모듈을 가로챕니다. 그 안에는 jest.requireActual을 사용하여 실제 내보내기를 가져오고 상수 IS_PRODUCTION에 대한 getter를 추가합니다.

jest.mock("./constants", () => {
  const constants = jest.requireActual("./constants");
  return {
    ...constants,
    get IS_PRODUCTION() {
      return mockIsProduction();
    },
  };
});

2. IS_PRODUCTION의 가치를 조롱

각 테스트 내에서 mockReturnValue를 사용하여 IS_PRODUCTION에 대한 다양한 값을 시뮬레이션합니다.

  • 생산을 위한 mockIsProduction.mockReturnValue(true).
  • 개발용 mockIsProduction.mockReturnValue(false).

3. mockClear로 청소

각 테스트 전에 모의 상태를 지워 다른 테스트를 방해하지 않도록 합니다.

beforeEach(() => {
  mockIsProduction.mockClear();
});

결론

이 상수 모의 패턴을 사용하면 애플리케이션 로직에 사용되는 값을 동적으로 제어하여 격리되고 안정적인 테스트를 보장할 수 있습니다. 전역 변수, 구성 또는 시스템 상태를 기반으로 동작을 테스트해야 할 때 특히 유용합니다.

이 접근 방식을 사용하면 코드 구조를 손상시키거나 불필요한 외부 종속성을 추가하지 않고도 복잡한 시나리오를 처리할 수 있습니다.

위 내용은 Jest를 사용한 테스트에서 상수 모의: 실제 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.