0
votes

Jest.Spyon équivalent pour Jest.Mock

se moquer d'un module entier mais conserver la logique de module d'origine. Semblable à jest.spyon Comportement par défaut, où la méthode d'origine est appelée.

Utilisation de jest.mock permet d'exécuter les affirmations nécessaires, mais n'exécute pas la logique d'origine Et parfois, je veux que la logique soit exécutée. Utilisation de jest.spyon permet une assertion et peut exécuter la logique d'origine, mais uniquement sur les exportations nommées du module, qui est généralement utile mais pas lorsque la méthode est exportée par défaut ou comme dans le code d'échantillon ci-dessous. < / p> xxx

J'ai peut-être manqué quelque chose de simple, mais jusqu'à présent docs ou Google FU n'a cédé aucun résultat.


0 commentaires

3 Réponses :


1
votes

Il n'y a aucun moyen de se moquer de module et d'espionner sur ses méthodes. La raison est que la Jest remplace vraiment le module avec le module.


2 commentaires

Je ne pense pas que cela exécute la logique dans le module d'origine, il fournit simplement une interface moquée. Jest.Spyon (Module, 'MethodName') Exécute toujours la logique d'origine de la méthode et fournit une interface simulée, je recherche un équivalent de niveau de module.


Désolé raté la partie avec exécution de la logique d'origine



1
votes

Je le fais actuellement comme ça

jest.mock('./somepath', () => (
  Object.fromEntries(
    Object.entries(jest.requireActual('./somepath'))
      .map(([key, value]) => [key, jest.fn(value)])
  )
))


0 commentaires

0
votes

Ceci est arrivé assez souvent que je viens de décider d'écrire ma propre bibliothèque pour générer des simulacres automatiques de modules qui conservent la mise en œuvre d'origine, mais peuvent être remplacés comme Jest.spyon Code>.

JEST MODULE MODULE P>

import * as mock from "jest-mock-module";
mock.extend(jest); // optionally extend jest to use the "jest.spy" syntax
jest.spy("src/moduleToMock"); // Placed before other imports like "jest.mock".

import moduleToMock from "src/moduleToMock";
import moduleToTest from "src/moduleToTest";

it("does a thing", () => {
  moduleToTest.callFunctionThatUsesModuleToMock();
  expect(moduleToMock.usedFunction).toHaveBeenCalledTimes(1);
});


0 commentaires