Heim >Web-Frontend >js-Tutorial >Konstanten in Tests mit Scherz verspotten: Ein praktisches Beispiel
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.
Wir definieren eine Konstante namens IS_PRODUCTION, die angibt, ob wir uns in einer Produktionsumgebung befinden:
// constants.js export const IS_PRODUCTION = false;
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; }
Wir wollen das Verhalten von adjustImageQuality für beide Szenarien testen: Produktion (IS_PRODUCTION = true) und Entwicklung (IS_PRODUCTION = false).
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); });
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(); }, }; });
In jedem Test verwenden wir MockReturnValue, um verschiedene Werte für IS_PRODUCTION zu simulieren:
Vor jedem Test löschen wir den Scheinstatus, um sicherzustellen, dass er andere Tests nicht beeinträchtigt:
beforeEach(() => { mockIsProduction.mockClear(); });
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!