ค้นหาเว็บไซต์

การทดสอบหน่วย - ฉันจะระบุหลายโฟลเดอร์ต้นทางใน tsconfig.json ของฉันได้อย่างไร?


ฉันมีโครงสร้างโครงการดังต่อไปนี้ในปัจจุบัน:

project/
  tsconfig.json
  webpack.config.js
  package.json
  node_modules/
    ...lots of dependencies
  typings/
    ...lots of .d.ts files for the dependencies
  src/
    ...folders for files for my projects

ไฟล์ tsonfig.json ของฉันมีลักษณะดังนี้:

{
"compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "noImplicitAny": false,
    "outDir": "./js",
    "rootDir": "./src",
    "sourceMap": true,
    "jsx": "react"
},
"exclude": [
    "typings/main.d.ts",
    "typings/main",
    "node_modules"
    ]
}

ทั้งหมดนี้ทำงานได้ดีมากและฉันสามารถพัฒนาการใช้งานของฉันและรันมันในเบราว์เซอร์ได้อย่างมีความสุข

ตอนนี้ฉันอยากจะเพิ่มการทดสอบหน่วยบางอย่างให้กับโปรเจคของฉัน และเนื่องจากฉันมาจากพื้นหลังของ Java สัญชาตญาณเริ่มต้นของฉันคือการวางการทดสอบในโฟลเดอร์แยกต่างหาก:

project/
  test/
    ...all of my test cases

แน่นอนว่า ไฟล์ในโฟลเดอร์ test/ จำเป็นต้องอ้างอิงโค้ดในโฟลเดอร์ src/ ของผม ผมจะตั้งค่านั้นอย่างไร?

หรือว่ามันจะ "ดีกว่า" หากวางการทดสอบไว้ในไฟล์ src/ โดยตรงและมีไฟล์ webpack.config.js แยกต่างหากสำหรับพวกมัน?

สับสนจริงๆ ว่าสิ่งนี้ทำงานอย่างไรในทางปฏิบัติในโครงการ TypeScript ขนาดใหญ่

หมายเหตุ: ฉันเคยเห็นสิ่งนี้มาก่อนแต่พบว่าคำตอบนั้นไม่ค่อยให้ความกระจ่าง มันดูเหมือนว่าการสนทนาเกี่ยวกับฟีเจอร์ที่อ้างถึง filesGlob จะช่วยฉันได้ แต่ฉันก็แค่สงสัยว่าผู้คนกำลังทำสิ่งนี้กันอย่างไรในวันนี้?

คำตอบ #1

ตอนนี้นอกจาก rootDir แล้ว คุณสามารถใช้ rootDirs ได้

"rootDirs": ["./scripts", "./src"],

สำหรับหลายโฟลเดอร์

นี่คือเอกสาร API: https://www.typescriptlang.org/docs/handbook/module-resolution.html#virtual-directories-with-rootdirs

คำตอบ #2

ฉันคิดว่าคุณกำลังมองหาการแมปเส้นทาง ด้วยตัวเลือกคอมไพเลอร์ paths คุณสามารถระบุไม่เพียงแค่การแมปไปยังที่ตั้งเดียว แต่ไปหลายที่ได้ นี่คือตัวอย่างจากเอกสาร:

"compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "generated/*"
      ]
    }
}

ถ้าคอมไพเลอร์ไม่พบโมดูลในตำแหน่งที่คาดไว้ มันจะทำการแก้ไขโมดูลซ้ำในโฟลเดอร์ย่อย "generated" การตั้งค่า baseUrl ดูเหมือนจะซ้ำซ้อน แต่เป็นสิ่งจำเป็น

บทความที่เกี่ยวข้อง