プロジェクトで定数を使用する場合、さまざまなシナリオをテストするために値を変更する必要がある場合があります。ただし、直接インポートされた定数は簡単に上書きできないため、テストの作成が困難になる場合があります。この記事では、Jest を使用して定数を動的にモックし、分離された信頼性の高いテストを確保する方法を説明します。
adjustImageQuality という架空の例を作成してみましょう。ここでは、運用環境にいるかどうかに応じて画像の品質を調整します。
運用環境にいるかどうかを示す IS_PRODUCTION という定数を定義します。
// constants.js export const IS_PRODUCTION = false;
ここで、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 の動作をテストしたいと考えています。
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); });
jest.mock を使用して定数モジュールをインターセプトします。その中で、 jest.requireActual を使用して実際のエクスポートを取得し、定数 IS_PRODUCTION のゲッターを追加します。
jest.mock("./constants", () => { const constants = jest.requireActual("./constants"); return { ...constants, get IS_PRODUCTION() { return mockIsProduction(); }, }; });
各テスト内で、mockReturnValue を使用して、IS_PRODUCTION:
のさまざまな値をシミュレートします。各テストの前に、モック状態をクリアして、他のテストに干渉しないことを確認します。
beforeEach(() => { mockIsProduction.mockClear(); });
この定数のモック パターンを使用すると、アプリケーション ロジックで使用される値を動的に制御し、分離された信頼性の高いテストを確保できます。これは、グローバル変数、構成、またはシステム状態に基づいて動作をテストする必要がある場合に特に役立ちます。
このアプローチを使用すると、コードの構造を損なったり、不要な外部依存関係を追加したりすることなく、複雑なシナリオに対応できます。
以上がJest を使用したテストでの定数のモック: 実践例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。