Tôi biết rằng đây không nhất thiết là câu trả lời mà bạn đang tìm kiếm, nhưng điều tôi đã tìm thấy là hầu hết thời gian nếu một chức năng riêng tư đáng để thử nghiệm, nó đáng để nằm trong tệp riêng của nó.
Ví dụ, thay vì có các phương thức riêng tư trong cùng một tệp với các phương thức công khai, như thế này ...
src / điều / 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);
}
... bạn chia nó ra như thế này:
src / điều / 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 / điều / nội bộ / helper1.js
export function helper1 (x) {
return 2 * x;
}
src / điều / nội bộ / helper2.js
export function helper2 (x) {
return 3 * x;
}
Bằng cách đó, bạn có thể dễ dàng kiểm tra helper1
và thực tế helper2
, mà không cần sử dụng Rewire và "ma thuật" khác (mà tôi đã tìm thấy, có những điểm đau riêng trong khi gỡ lỗi hoặc khi bạn cố gắng tiến về TypeScript, không đề cập đến việc kém hơn dễ hiểu cho đồng nghiệp mới). Và chúng nằm trong một thư mục con được gọi internal
, hoặc một cái gì đó tương tự, sẽ giúp tránh việc sử dụng chúng vô tình ở những nơi ngoài ý muốn.
PS: Một vấn đề thường gặp với các phương pháp "tư nhân" ở đây là nếu bạn muốn thử nghiệm publicMethod1
và publicMethod2
và nhạo báng những người giúp việc, một lần nữa, bạn thường cần một cái gì đó giống như ReWire để làm điều đó. Tuy nhiên, nếu chúng nằm trong các tệp riêng biệt, bạn có thể sử dụng Proxyquire để thực hiện, không giống như Rewire, không cần bất kỳ thay đổi nào đối với quy trình xây dựng của bạn, dễ đọc và gỡ lỗi và hoạt động tốt ngay cả với TypeScript.