Heim >Web-Frontend >js-Tutorial >Konstanten in Tests mit Scherz verspotten: Ein praktisches Beispiel

Konstanten in Tests mit Scherz verspotten: Ein praktisches Beispiel

Barbara Streisand
Barbara StreisandOriginal
2025-01-11 08:53:42340Durchsuche

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

Wenn Sie in Ihren Projekten mit Konstanten arbeiten, ist es manchmal notwendig, deren Werte zu ändern, um verschiedene Szenarien zu testen. Allerdings können direkt importierte Konstanten nicht einfach überschrieben werden, was die Testerstellung erschweren kann. In diesem Artikel erfahren Sie, wie Sie Jest verwenden, um Konstanten dynamisch zu verspotten und so isolierte und zuverlässige Tests sicherzustellen.

Lassen Sie uns ein fiktives Beispiel namens „adjustImageQuality“ erstellen, in dem wir die Qualität eines Bildes abhängig davon anpassen, ob wir uns in einer Produktionsumgebung befinden.


Durchführung

Constants.js-Datei

Wir definieren eine Konstante namens IS_PRODUCTION, die angibt, ob wir uns in einer Produktionsumgebung befinden:

// constants.js
export const IS_PRODUCTION = false;

Datei „adjustImageQuality.js“.

Jetzt erstellen wir die Funktion „adjustImageQuality“. Die Bildqualität ändert sich nur, wenn das System in Produktion ist:

// 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;
}

Schreiben der Tests

Wir wollen das Verhalten von adjustImageQuality für beide Szenarien testen: Produktion (IS_PRODUCTION = true) und Entwicklung (IS_PRODUCTION = false).

AdjustImageQuality.test.js-Datei

Wir verwenden Jest, um den Wert von IS_PRODUCTION dynamisch zu verspotten. Das Geheimnis besteht darin, jest.mock zu verwenden und die Konstante mit einem benutzerdefinierten Getter zu überschreiben.

// 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);
});

Scheinerklärung

1. Den Mock erstellen

Wir verwenden jest.mock, um das Konstantenmodul abzufangen. Darin verwenden wir jest.requireActual, um die tatsächlichen Exporte abzurufen und fügen einen Getter für die Konstante IS_PRODUCTION hinzu.

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

2. Den Wert von IS_PRODUCTION verspotten

In jedem Test verwenden wir MockReturnValue, um verschiedene Werte für IS_PRODUCTION zu simulieren:

  • mockIsProduction.mockReturnValue(true) für die Produktion.
  • mockIsProduction.mockReturnValue(false) für die Entwicklung.

3. Reinigung mit MockClear

Vor jedem Test löschen wir den Scheinstatus, um sicherzustellen, dass er andere Tests nicht beeinträchtigt:

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

Abschluss

Mit diesem Scheinmuster für Konstanten können Sie die in Ihrer Anwendungslogik verwendeten Werte dynamisch steuern und so isolierte und zuverlässige Tests gewährleisten. Dies ist besonders nützlich, wenn Sie Verhaltensweisen basierend auf globalen Variablen, Konfigurationen oder Systemzuständen testen müssen.

Mit diesem Ansatz können Sie komplexe Szenarien abdecken, ohne die Struktur Ihres Codes zu beeinträchtigen oder unnötige externe Abhängigkeiten hinzuzufügen.

Das obige ist der detaillierte Inhalt vonKonstanten in Tests mit Scherz verspotten: Ein praktisches Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn