我知道这不一定是您要寻找的答案,但是我发现,大多数时候,如果私有功能值得测试,那么值得将其保存在自己的文件中。
例如,不要在与公共文件相同的文件中包含私有方法,就像这样……
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;
}
这样,您可以轻松地测试helper1
和helper2
原样,不使用重新布线等“神奇”(其中,我发现,有自己的痛点在调试时,或者当您尝试让你对打字稿的举动,更何况穷新同事的理解能力)。而且它们位于名为internal
或类似的子文件夹中,将有助于避免在不希望的地方意外使用它们。
PS:与“私有”的方法的另一个常见的问题是,如果你想测试publicMethod1
,并publicMethod2
和嘲笑助手,同样,你通常需要像重新布线做到这一点。但是,如果它们在单独的文件中,则可以使用Proxyquire进行操作,这与Rewire不同,它不需要对构建过程进行任何更改,易于阅读和调试,即使使用TypeScript也可以很好地工作。