Maison >interface Web >js tutoriel >Se moquer des constantes dans les tests avec Jest : un exemple pratique

Se moquer des constantes dans les tests avec Jest : un exemple pratique

Barbara Streisand
Barbara Streisandoriginal
2025-01-11 08:53:42318parcourir

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

Lorsque vous travaillez avec des constantes dans vos projets, il est parfois nécessaire de modifier leurs valeurs pour tester différents scénarios. Cependant, les constantes directement importées ne peuvent pas être facilement écrasées, ce qui peut rendre la création de tests difficile. Dans cet article, nous verrons comment utiliser Jest pour simuler dynamiquement des constantes, garantissant ainsi des tests isolés et fiables.

Créons un exemple fictif appelé ajusterImageQuality, où nous ajustons la qualité d'une image selon que nous sommes ou non dans un environnement de production.


Mise en œuvre

fichier constantes.js

On définit une constante appelée IS_PRODUCTION qui indique si l'on est dans un environnement de production :

// constants.js
export const IS_PRODUCTION = false;

Fichier ajusterImageQuality.js

Maintenant, nous créons la fonction ajusterImageQuality. Cela modifie la qualité de l'image uniquement si le système est en production :

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

Écrire les tests

Nous souhaitons tester le comportement d'ajustImageQuality pour les deux scénarios : production (IS_PRODUCTION = true) et développement (IS_PRODUCTION = false).

Fichier ajusterImageQuality.test.js

Nous utilisons Jest pour nous moquer dynamiquement de la valeur de IS_PRODUCTION. Le secret est d'utiliser jest.mock et de remplacer la constante avec un getter personnalisé.

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

Explication simulée

1. Créer la maquette

Nous utilisons jest.mock pour intercepter le module de constantes. À l'intérieur, nous utilisons jest.requireActual pour obtenir les exportations réelles et ajoutons un getter pour la constante IS_PRODUCTION.

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

2. Se moquer de la valeur d'IS_PRODUCTION

Dans chaque test, nous utilisons mockReturnValue pour simuler différentes valeurs pour IS_PRODUCTION :

  • mockIsProduction.mockReturnValue(true) pour la production.
  • mockIsProduction.mockReturnValue(false) pour le développement.

3. Nettoyage avec mockClear

Avant chaque test, nous effaçons l'état fictif pour nous assurer qu'il n'interfère pas avec d'autres tests :

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

Conclusion

Ce modèle simulé pour les constantes vous permet de contrôler dynamiquement les valeurs utilisées dans la logique de votre application, garantissant ainsi des tests isolés et fiables. Ceci est particulièrement utile lorsque vous devez tester des comportements basés sur des variables globales, des configurations ou des états du système.

Avec cette approche, vous pouvez couvrir des scénarios complexes sans compromettre la structure de votre code ni ajouter de dépendances externes inutiles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn