Ich weiß, dass dies nicht unbedingt die Antwort ist, nach der Sie suchen, aber ich habe festgestellt, dass es sich die meiste Zeit, wenn eine private Funktion getestet werden sollte, lohnt, in einer eigenen Datei zu sein.
ZB anstatt private Methoden in derselben Datei wie die öffentlichen zu haben, wie diese ...
src / thing / 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);
}
... du hast es so aufgeteilt:
src / thing / 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 / thing / internal / helper1.js
export function helper1 (x) {
return 2 * x;
}
src / thing / internal / helper2.js
export function helper2 (x) {
return 3 * x;
}
Auf diese Weise können Sie problemlos testen helper1
und helper2
unverändert, ohne Rewire und andere "Magie" zu verwenden (die, wie ich festgestellt habe, ihre eigenen Schwachstellen beim Debuggen haben oder wenn Sie versuchen, auf TypeScript umzusteigen, ganz zu schweigen von schlechteren Verständlichkeit für neue Kollegen). Und wenn sie sich in einem Unterordner namens internal
oder so ähnlich befinden, können Sie verhindern, dass sie versehentlich an unbeabsichtigten Orten verwendet werden.
PS: Ein weiteres häufiges Problem mit „privaten“ Methoden ist , dass , wenn Sie testen mögen , publicMethod1
und publicMethod2
und die Helfer verspotten, wieder, Sie in der Regel so etwas wie Rewire brauchen , das zu tun. Wenn sie sich jedoch in separaten Dateien befinden, können Sie Proxyquire verwenden, was im Gegensatz zu Rewire keine Änderungen an Ihrem Erstellungsprozess erfordert, einfach zu lesen und zu debuggen ist und auch mit TypeScript gut funktioniert.