Je sais que ce n'est pas nécessairement la réponse que vous recherchez, mais ce que j'ai trouvé, c'est que la plupart du temps, si une fonction privée vaut la peine d'être testée, elle vaut la peine d'être dans son propre fichier.
Par exemple, au lieu d'avoir des méthodes privées dans le même fichier que les méthodes publiques, comme ceci ...
src / chose / PublicInterface.js
function helper1 (x) {
return 2 * x;
}
function helper2 (x) {
return 3 * x;
}
export function publicMethod1(x) {
return helper1(x);
}
export function publicMethod2(x) {
return helper1(x) + helper2(x);
}
... vous le divisez comme ceci:
src / chose / PublicInterface.js
import {helper1} from './internal/helper1.js';
import {helper2} from './internal/helper2.js';
export function publicMethod1(x) {
return helper1(x);
}
export function publicMethod2(x) {
return helper1(x) + helper2(x);
}
src / chose / interne / helper1.js
export function helper1 (x) {
return 2 * x;
}
src / chose / interne / helper2.js
export function helper2 (x) {
return 3 * x;
}
De cette façon, vous pouvez facilement tester helper1
et helper2
tel quel, sans utiliser Rewire et d'autres "magies" (qui, j'ai trouvé, ont leurs propres points faibles lors du débogage, ou lorsque vous essayez de vous déplacer vers TypeScript, pour ne pas mentionner plus pauvre compréhensibilité pour les nouveaux collègues). Et le fait de les placer dans un sous-dossier appelé internal
, ou quelque chose du genre, aidera à éviter leur utilisation accidentelle dans des endroits non souhaités.
PS: Une autre question commune avec des méthodes « privées » est que si vous voulez tester publicMethod1
et publicMethod2
et se moquer des aides, encore une fois, vous avez normalement besoin de quelque chose comme ReWire de le faire. Cependant, s'ils sont dans des fichiers séparés, vous pouvez utiliser Proxyquire pour le faire, qui, contrairement à Rewire, ne nécessite aucune modification de votre processus de construction, est facile à lire et à déboguer, et fonctionne bien même avec TypeScript.