Wiem, że niekoniecznie jest to odpowiedź, której szukasz, ale stwierdziłem, że w większości przypadków, jeśli funkcja prywatna jest warta przetestowania, warto być w jej własnym pliku.
Np. Zamiast mieć prywatne metody w tym samym pliku co publiczne, na przykład ...
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);
}
... podzielisz to w ten sposób:
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;
}
W ten sposób możesz łatwo testować helper1
i helper2
tak jak jest, bez używania Rewire i innych "magicznych" (które, jak odkryłem, mają swoje własne problemy podczas debugowania lub gdy próbujesz przejść w kierunku TypeScript, nie wspominając o gorszej zrozumiałość dla nowych kolegów). A umieszczenie ich w podfolderze o nazwie internal
lub czymś podobnym pomoże uniknąć przypadkowego użycia ich w niezamierzonych miejscach.
PS: Innym częstym problemem związanym z metodami „prywatnymi” jest to, że jeśli chcesz przetestować publicMethod1
i publicMethod2
wyśmiać pomocników, zwykle potrzebujesz do tego czegoś takiego jak Rewire. Jeśli jednak znajdują się w osobnych plikach, możesz to zrobić za pomocą Proxyquire , który w przeciwieństwie do Rewire nie wymaga żadnych zmian w procesie kompilacji, jest łatwy do odczytania i debugowania oraz działa dobrze nawet z TypeScript.