Я знаю, що це не обов'язково відповідь, яку ви шукаєте, але те, що я знайшов, це те, що більшість часу, якщо приватна функція варта тестувати, варто бути у власному файлі.
Наприклад, замість того, щоб приватні методи були в тому ж файлі, що і загальнодоступні, як цей ...
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 / річ / внутрішній / helper1.js
export function helper1 (x) {
return 2 * x;
}
src / річ / внутрішній / helper2.js
export function helper2 (x) {
return 3 * x;
}
Таким чином, ви можете легко протестувати helper1
і helper2
як є, не користуючись Rewire та іншими "магіями" (які, як я виявив, мають свої больові точки під час налагодження або коли ви намагаєтесь зробити свій рух до TypeScript, не кажучи вже про бідніші зрозумілість для нових колег). А знаходження в підпапці, що називається internal
, або щось подібне, допоможе уникнути випадкового використання їх у ненавмисних місцях.
PS: Ще одна поширена проблема з «приватними» методів є те , що якщо ви хочете перевірити publicMethod1
і publicMethod2
і знущатися хелперів, знову ж , вам зазвичай потрібно що - щось на зразок Rewire , щоб зробити це. Однак якщо вони знаходяться в окремих файлах, ви можете використовувати Proxyquire для цього, який, на відміну від Rewire, не потребує змін у вашому процесі збирання, простий для читання та налагодження, і добре працює навіть з TypeScript.