Sei que essa não é necessariamente a resposta que você está procurando, mas o que descobri é que, na maioria das vezes, se uma função privada vale a pena testar, vale a pena estar em seu próprio arquivo.
Por exemplo, em vez de ter métodos privados no mesmo arquivo que os públicos, como este ...
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);
}
... você divide assim:
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 / coisa / interno / helper1.js
export function helper1 (x) {
return 2 * x;
}
src / coisa / interno / helper2.js
export function helper2 (x) {
return 3 * x;
}
Dessa forma, você pode facilmente testar helper1
e helper2
como está, sem usar o Rewire e outras "mágicas" (que, eu descobri, têm seus próprios pontos problemáticos durante a depuração, ou quando você tenta avançar para o TypeScript, sem mencionar os mais pobres compreensibilidade para novos colegas). E eles estarem em uma subpasta chamada internal
, ou algo assim, ajudará a evitar o uso acidental deles em locais indesejados.
PS: Outro problema comum com os métodos "privados" é que se pretende testar publicMethod1
e publicMethod2
e zombar dos ajudantes, mais uma vez, você normalmente precisa de algo como Rewire para fazer isso. No entanto, se eles estiverem em arquivos separados, é possível usar o Proxyquire para fazê-lo, o que, diferentemente do Rewire, não precisa de alterações no processo de compilação, é fácil de ler e depurar e funciona bem mesmo com o TypeScript.