J'essaye de tester une fonction dans le module X. C'est une fonction assez complexe. Dans cette fonction, j'importe une fonction du module Y qui appelle un service tiers. Comment puis-je copier ce service tiers dans le module Y si mes tests pour le module X n'importent pas le module Y?Comment copier/masquer une fonction dans un module appelé par un autre module dans un test?
Répondre
Vous pouvez patcher le long de la couture require
avec un projet comme moquerie:
Si vous avez essayé de travailler avec des simulacres dans Node.js, vous avez sans doute découvert que ce n'est pas si facile à obtenir vos simulateurs sont connectés à la face du système de chargement des modules de Node. Lorsque votre source-sous-test tire dans ses dépendances à travers require, vous voulez que vos moqueurs fournis, au lieu du module d'origine, pour permettre de véritables tests unitaires de votre code.
Disons que votre module X
renvoie le résultat d'une opération effectuée par Y
, on peut dire que X
est la suivante:
const y = require ('y.js');
xWork() {
return y.doWork().result;
}
Ici, vous pouvez mettre à jour X
pour injecter Y
comme ceci:
xWork (y) {
return y.doWork().result;
}
De vous là dans votre test, vous pouvez générer une maquette de Y
qui peut être injecté comme ceci:
yMock = {
doWork:() => {
return { result: 'mockedResult' };
}
};
x.xWork(yMock); // call x with y mock
Javascript vous permet de moquez quoi que ce soit sans nécessiter aucune dépendance qui est parfait pour les tests unitaires. J'espère que cela aide.