Maison  >  Article  >  interface Web  >  Comment se moquer des importations de modules ES6 dans Jest ?

Comment se moquer des importations de modules ES6 dans Jest ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 22:31:30813parcourir

How to Mock ES6 Module Imports in Jest?

Mocking ES6 Module Imports in Jest

Introduction

Jest fournit une suite complète d'outils pour les tests unitaires, y compris la simulation modules importés dans votre code. Cet article explique comment simuler les importations de modules ES6 dans Jest, en relevant le défi du test des dépendances des modules.

Énoncé du problème

Les importations de modules moqueuses permettent aux développeurs d'isoler le comportement de un module spécifique lors de l'exécution de tests pour ses modules dépendants. Cependant, l'approche utilisée dans Jasmine, où les importations sont remplacées par des espions, n'est pas directement applicable dans Jest en raison de son environnement de test différent.

Solution

Jest fournit le syntaxe import * pour importer toutes les exportations d'un module en tant qu'objet unique. Cette technique peut être utilisée pour simuler les importations de modules ES6.

Mocking Named Exports

Pour les exportations nommées, importez simplement le module à l'aide de import *, puis mute l'objet exporté en moquez-vous de la fonction souhaitée :

// dependency.js
export const doSomething = (y) => console.log(y);
// myModule.js
import { doSomething } from './dependency';

export default (x) => {
  doSomething(x * 2);
};
// myModule-test.js
import myModule from '../myModule';
import * as dependency from '../dependency';

describe('myModule', () => {
  it('calls the dependency with double the input', () => {
    dependency.doSomething = jest.fn(); // Mutate the named export

    myModule(2);

    expect(dependency.doSomething).toBeCalledWith(4);
  });
});

Mocking Default Exports

Pour les exportations par défaut, vous pouvez les importer en utilisant import moduleName from 'modulePath' puis muter la valeur par défaut de l'objet importé :

// dependency.js
export default (y) => console.log(y);
// myModule.js
import myModule from './myModule';
import * as dependency from '../dependency';

describe('myModule', () => {
  it('calls the dependency with double the input', () => {
    dependency.default = jest.fn(); // Mutate the default export

    myModule(2);

    expect(dependency.default).toBeCalledWith(4); // Assert against the default
  });
});

Conclusion

En utilisant la syntaxe import* et en mutant l'objet exporté, il est possible pour simuler les importations de modules ES6 dans Jest, vous permettant de tester les fonctionnalités de vos modules tout en isolant leurs dépendances.

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