ฉันรู้ว่านี่ไม่ใช่คำตอบที่คุณกำลังมองหา แต่สิ่งที่ฉันพบคือส่วนใหญ่แล้วถ้าฟังก์ชันส่วนตัวคุ้มค่ากับการทดสอบมันก็คุ้มค่าที่จะอยู่ในไฟล์ของตัวเอง
เช่นแทนที่จะมีเมธอดส่วนตัวในไฟล์เดียวกับแบบสาธารณะเช่นนี้ ...
src / สิ่ง / 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 / สิ่ง / 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