ホームページ > ウェブフロントエンド > jsチュートリアル > Jest を使用したテストでの定数のモック: 実践例

Jest を使用したテストでの定数のモック: 実践例

Barbara Streisand
リリース: 2025-01-11 08:53:42
オリジナル
277 人が閲覧しました

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

プロジェクトで定数を使用する場合、さまざまなシナリオをテストするために値を変更する必要がある場合があります。ただし、直接インポートされた定数は簡単に上書きできないため、テストの作成が困難になる場合があります。この記事では、Jest を使用して定数を動的にモックし、分離された信頼性の高いテストを確保する方法を説明します。

adjustImageQuality という架空の例を作成してみましょう。ここでは、運用環境にいるかどうかに応じて画像の品質を調整します。


実装

constants.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 のゲッターを追加します。

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート