これが必ずしもあなたが探している答えではないことは知っていますが、私が見つけたのは、ほとんどの場合、プライベート関数がテストする価値がある場合、それ自体のファイルにある価値があるということです。
たとえば、次のように、パブリックメソッドと同じファイルにプライベートメソッドを置くのではなく...
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);
}
...次のように分割します。
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;
}
そうすれば、Rewireやその他の「マジック」を使用しなくても、簡単にテストhelper1
しhelper2
て現状のままでテストできます(これは、デバッグ中、またはTypeScriptに移行しようとするときに問題があることはわかっています)。新しい同僚のための理解可能性)。そして、それらがと呼ばれるサブフォルダinternal
またはそのような場所にあると、意図しない場所での偶発的な使用を回避するのに役立ちます。
PS:「プライベート」メソッドのもう1つの一般的な問題は、ヘルパーをテストpublicMethod1
しpublicMethod2
てモックしたい場合、通常、Rewireのようなものが必要です。ただし、それらが別々のファイルにある場合は、Proxyquireを使用して実行できます。これは、Rewireとは異なり、ビルドプロセスに変更を加える必要がなく、読み取りやデバッグが簡単で、TypeScriptでもうまく機能します。