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
Libérer: 2025-01-11 08:53:42
original
391 Les gens l'ont consulté

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;
Copier après la connexion

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;
}
Copier après la connexion

É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);
});
Copier après la connexion

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();
    },
  };
});
Copier après la connexion

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();
});
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal