# Test Coverage Plan (ไทย) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/COVERAGE_PLAN.md) · 🇪🇹 [am](../../../am/docs/ops/COVERAGE_PLAN.md) · 🇸🇦 [ar](../../../ar/docs/ops/COVERAGE_PLAN.md) · 🇦🇿 [az](../../../az/docs/ops/COVERAGE_PLAN.md) · 🇧🇬 [bg](../../../bg/docs/ops/COVERAGE_PLAN.md) · 🇧🇩 [bn](../../../bn/docs/ops/COVERAGE_PLAN.md) · 🇧🇦 [bs](../../../bs/docs/ops/COVERAGE_PLAN.md) · 🇨🇿 [cs](../../../cs/docs/ops/COVERAGE_PLAN.md) · 🇩🇰 [da](../../../da/docs/ops/COVERAGE_PLAN.md) · 🇩🇪 [de](../../../de/docs/ops/COVERAGE_PLAN.md) · 🇬🇷 [el](../../../el/docs/ops/COVERAGE_PLAN.md) · 🇪🇸 [es](../../../es/docs/ops/COVERAGE_PLAN.md) · 🇪🇪 [et](../../../et/docs/ops/COVERAGE_PLAN.md) · 🇮🇷 [fa](../../../fa/docs/ops/COVERAGE_PLAN.md) · 🇫🇮 [fi](../../../fi/docs/ops/COVERAGE_PLAN.md) · 🇫🇷 [fr](../../../fr/docs/ops/COVERAGE_PLAN.md) · 🇮🇪 [ga](../../../ga/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [gu](../../../gu/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ha](../../../ha/docs/ops/COVERAGE_PLAN.md) · 🇮🇱 [he](../../../he/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [hi](../../../hi/docs/ops/COVERAGE_PLAN.md) · 🇭🇷 [hr](../../../hr/docs/ops/COVERAGE_PLAN.md) · 🇭🇺 [hu](../../../hu/docs/ops/COVERAGE_PLAN.md) · 🇦🇲 [hy](../../../hy/docs/ops/COVERAGE_PLAN.md) · 🇮🇩 [id](../../../id/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [ig](../../../ig/docs/ops/COVERAGE_PLAN.md) · 🇮🇹 [it](../../../it/docs/ops/COVERAGE_PLAN.md) · 🇯🇵 [ja](../../../ja/docs/ops/COVERAGE_PLAN.md) · 🇬🇪 [ka](../../../ka/docs/ops/COVERAGE_PLAN.md) · 🇰🇭 [km](../../../km/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [kn](../../../kn/docs/ops/COVERAGE_PLAN.md) · 🇰🇷 [ko](../../../ko/docs/ops/COVERAGE_PLAN.md) · 🇱🇹 [lt](../../../lt/docs/ops/COVERAGE_PLAN.md) · 🇱🇻 [lv](../../../lv/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ml](../../../ml/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [mr](../../../mr/docs/ops/COVERAGE_PLAN.md) · 🇲🇾 [ms](../../../ms/docs/ops/COVERAGE_PLAN.md) · 🇲🇹 [mt](../../../mt/docs/ops/COVERAGE_PLAN.md) · 🇲🇲 [my](../../../my/docs/ops/COVERAGE_PLAN.md) · 🇳🇵 [ne](../../../ne/docs/ops/COVERAGE_PLAN.md) · 🇳🇱 [nl](../../../nl/docs/ops/COVERAGE_PLAN.md) · 🇳🇴 [no](../../../no/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [or](../../../or/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [pa](../../../pa/docs/ops/COVERAGE_PLAN.md) · 🇵🇭 [phi](../../../phi/docs/ops/COVERAGE_PLAN.md) · 🇵🇱 [pl](../../../pl/docs/ops/COVERAGE_PLAN.md) · 🇵🇹 [pt](../../../pt/docs/ops/COVERAGE_PLAN.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/COVERAGE_PLAN.md) · 🇷🇴 [ro](../../../ro/docs/ops/COVERAGE_PLAN.md) · 🇷🇺 [ru](../../../ru/docs/ops/COVERAGE_PLAN.md) · 🇱🇰 [si](../../../si/docs/ops/COVERAGE_PLAN.md) · 🇸🇰 [sk](../../../sk/docs/ops/COVERAGE_PLAN.md) · 🇸🇮 [sl](../../../sl/docs/ops/COVERAGE_PLAN.md) · 🇷🇸 [sr](../../../sr/docs/ops/COVERAGE_PLAN.md) · 🇸🇪 [sv](../../../sv/docs/ops/COVERAGE_PLAN.md) · 🇰🇪 [sw](../../../sw/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [ta](../../../ta/docs/ops/COVERAGE_PLAN.md) · 🇮🇳 [te](../../../te/docs/ops/COVERAGE_PLAN.md) · 🇹🇷 [tr](../../../tr/docs/ops/COVERAGE_PLAN.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/COVERAGE_PLAN.md) · 🇵🇰 [ur](../../../ur/docs/ops/COVERAGE_PLAN.md) · 🇺🇿 [uz](../../../uz/docs/ops/COVERAGE_PLAN.md) · 🇻🇳 [vi](../../../vi/docs/ops/COVERAGE_PLAN.md) · 🇳🇬 [yo](../../../yo/docs/ops/COVERAGE_PLAN.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/COVERAGE_PLAN.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/COVERAGE_PLAN.md) --- อัปเดตล่าสุด: 2026-06-28 > สถานะที่วัดเมื่อ 2026-05-13: บรรทัด 82.58%, คำสั่ง 82.58%, ฟังก์ชัน 84.23%, สาขา 75.22% เฟส 1-5 เสร็จสมบูรณ์แล้ว ปัจจุบันมุ่งเน้นที่เฟส 6 (>=85%) และเฟส 7 (>=90%) ## ค่าพื้นฐาน ตัวเลขความครอบคลุมมีหลายค่า ขึ้นอยู่กับวิธีคำนวณรายงาน สำหรับการวางแผน มีเพียงค่าเดียวที่เป็นประโยชน์ | เมตริก | ขอบเขต | คำสั่ง / บรรทัด | สาขา | ฟังก์ชัน | หมายเหตุ | | ------------------ | --------------------------------------------- | --------------: | -----: | -------: | --------------------------------------------- | | แบบเดิม | `npm run test:coverage` แบบเก่า | 79.42% | 75.15% | 67.94% | สูงเกินจริง: นับไฟล์ทดสอบและไม่รวม `open-sse` | | เพื่อการวินิจฉัย | เฉพาะซอร์ส ไม่รวมการทดสอบและไม่รวม `open-sse` | 68.16% | 63.55% | 64.06% | มีประโยชน์เฉพาะสำหรับแยกวิเคราะห์ `src/**` | | ค่าพื้นฐานที่แนะนำ | เฉพาะซอร์ส ไม่รวมการทดสอบแต่รวม `open-sse` | 82.58% | 75.22% | 84.23% | นี่คือค่าพื้นฐานทั้งโปรเจกต์ที่ต้องปรับปรุง | ค่าพื้นฐานที่แนะนำคือตัวเลขที่ควรใช้เป็นเป้าหมายในการปรับปรุง ## กฎ - เป้าหมายความครอบคลุมใช้กับไฟล์ซอร์ส ไม่ใช่ `tests/**` - `open-sse/**` เป็นส่วนหนึ่งของผลิตภัณฑ์และต้องคงอยู่ในขอบเขต - โค้ดใหม่ไม่ควรลดความครอบคลุมในส่วนที่มีการแก้ไข - ควรทดสอบพฤติกรรมและผลลัพธ์ของสาขามากกว่ารายละเอียดการนำไปใช้งาน - สำหรับ `src/lib/db/**` ควรใช้ฐานข้อมูล SQLite ชั่วคราวและฟิกซ์เจอร์ขนาดเล็ก แทนการจำลองแบบครอบคลุมกว้าง ## ชุดคำสั่งปัจจุบัน - `npm run test:coverage` - เกณฑ์หลักด้านความครอบคลุมของซอร์สสำหรับชุดการทดสอบหน่วย - สร้าง `text-summary`, `html`, `json-summary` และ `lcov` - `npm run coverage:report` - รายงานโดยละเอียดแยกตามไฟล์จากการรันล่าสุด - `npm run test:coverage:legacy` - ใช้สำหรับการเปรียบเทียบย้อนหลังเท่านั้น ## เป้าหมายตามระยะ | เฟส | เป้าหมาย | จุดเน้น | สถานะ | | ----- | ------------------: | --------------------------------------------------------------------- | -------------- | | เฟส 1 | คำสั่ง / บรรทัด 60% | งานที่ได้ผลเร็วและความครอบคลุมของยูทิลิตีที่มีความเสี่ยงต่ำ | ✅ เสร็จแล้ว | | เฟส 2 | คำสั่ง / บรรทัด 65% | รากฐานของฐานข้อมูลและเส้นทาง | ✅ เสร็จแล้ว | | เฟส 3 | คำสั่ง / บรรทัด 70% | การตรวจสอบผู้ให้บริการและการวิเคราะห์การใช้งาน | ✅ เสร็จแล้ว | | เฟส 4 | คำสั่ง / บรรทัด 75% | ตัวแปลและตัวช่วยของ `open-sse` | ✅ เสร็จแล้ว | | เฟส 5 | คำสั่ง / บรรทัด 80% | สาขาของตัวจัดการและตัวดำเนินการใน `open-sse` | ✅ เสร็จแล้ว | | เฟส 6 | คำสั่ง / บรรทัด 85% | กรณีขอบที่ยากขึ้น หนี้ด้านสาขา และชุดทดสอบการถดถอย | กำลังดำเนินการ | | เฟส 7 | คำสั่ง / บรรทัด 90% | การตรวจเก็บขั้นสุดท้าย การปิดช่องว่าง และการปรับเกณฑ์ขึ้นอย่างเข้มงวด | รอดำเนินการ | ความครอบคลุมของสาขาและฟังก์ชันควรเพิ่มขึ้นในแต่ละเฟส แต่เป้าหมายหลักที่บังคับใช้คือความครอบคลุมของคำสั่ง / บรรทัด ## จุดที่ควรให้ความสำคัญ ไฟล์เหล่านี้มีความครอบคลุมระดับบรรทัดต่ำที่สุดในปัจจุบัน (< 60%) และให้ผลตอบแทนดีที่สุดสำหรับระยะที่ 6-7 สร้างจาก `coverage/coverage-summary.json` เมื่อ 2026-05-13: | # | ไฟล์ | บรรทัด % | | --- | ------------------------------------------------------------ | -------: | | 1 | `open-sse/services/compression/validation.ts` | 7.87% | | 2 | `src/app/api/v1/batches/route.ts` | 9.67% | | 3 | `src/app/docs/components/FeedbackWidget.tsx` | 9.80% | | 4 | `open-sse/services/compression/toolResultCompressor.ts` | 10.00% | | 5 | `src/app/docs/components/DocCodeBlocks.tsx` | 10.63% | | 6 | `open-sse/services/compression/engines/rtk/lineFilter.ts` | 10.96% | | 7 | `open-sse/services/specificityRules.ts` | 11.28% | | 8 | `src/mitm/systemCommands.ts` | 12.19% | | 9 | `open-sse/services/compression/aggressive.ts` | 12.77% | | 10 | `src/app/api/v1/batches/[id]/cancel/route.ts` | 12.98% | | 11 | `open-sse/services/compression/progressiveAging.ts` | 13.26% | | 12 | `open-sse/services/compression/engines/rtk/smartTruncate.ts` | 13.43% | | 13 | `open-sse/services/compression/engines/rtk/deduplicator.ts` | 13.51% | | 14 | `src/lib/cloudAgent/agents/jules.ts` | 13.52% | | 15 | `open-sse/services/compression/lite.ts` | 14.46% | | 16 | `src/app/api/v1/rerank/route.ts` | 14.94% | | 17 | `open-sse/services/compression/preservation.ts` | 15.07% | | 18 | `src/lib/cloudAgent/agents/codex.ts` | 15.54% | | 19 | `open-sse/services/tierResolver.ts` | 16.66% | | 20 | `src/app/docs/components/DocsLazyWrapper.tsx` | 16.66% | ประเด็นหลักสำหรับระยะที่ 6-7: - `open-sse/services/compression/**` เป็นกลุ่มไฟล์ที่มีความครอบคลุมต่ำหนาแน่นที่สุด และเป็นสาเหตุหลักของช่องว่างที่เหลืออยู่ - เส้นทาง API สำหรับแบตช์และการจัดอันดับใหม่ (`src/app/api/v1/batches/**`, `src/app/api/v1/rerank/route.ts`) จำเป็นต้องมีการทดสอบระดับ handler - อะแดปเตอร์ Cloud Agent (`src/lib/cloudAgent/agents/jules.ts`, `codex.ts`) และ `tierResolver.ts` จำเป็นต้องมีการทดสอบตามสถานการณ์ - คอมโพเนนต์ UI ของเอกสารและ `src/mitm/systemCommands.ts` มีลำดับความสำคัญต่ำกว่า แต่เพิ่มความครอบคลุมของ branch ได้ง่าย ## รายการตรวจสอบการดำเนินงาน ### ระยะที่ 1: 56.95% -> 60% - [x] แก้ไขเมตริกความครอบคลุมให้สะท้อนซอร์สโค้ดแทนไฟล์ทดสอบ - [x] เก็บสคริปต์ความครอบคลุมแบบเดิมไว้เพื่อใช้เปรียบเทียบ - [x] บันทึกค่าพื้นฐานและจุดที่ควรให้ความสำคัญไว้ในรีโพซิทอรี - [ ] เพิ่มการทดสอบแบบเจาะจงสำหรับยูทิลิตีที่มีความเสี่ยงต่ำ: - `src/shared/utils/upstreamError.ts` - `src/shared/utils/fetchTimeout.ts` - `src/lib/api/errorResponse.ts` - `src/shared/utils/apiAuth.ts` - `src/lib/display/names.ts` - [ ] เพิ่มการทดสอบเส้นทางสำหรับ: - `src/app/api/settings/require-login/route.ts` - `src/app/api/providers/[id]/models/route.ts` ### ระยะที่ 2: 60% -> 65% - [ ] เพิ่มการทดสอบที่ใช้ฐานข้อมูลสำหรับ: - `src/lib/db/modelComboMappings.ts` - `src/lib/db/settings.ts` - `src/lib/db/registeredKeys.ts` - [ ] ครอบคลุมพฤติกรรมของ branch ใน: - `src/lib/providers/validation.ts` - `src/app/api/v1/embeddings/route.ts` - `src/app/api/v1/moderations/route.ts` ### ระยะที่ 3: 65% -> 70% - [ ] เพิ่มการทดสอบการวิเคราะห์การใช้งานสำหรับ: - `src/lib/usage/usageHistory.ts` - `src/lib/usage/usageStats.ts` - `src/lib/usage/costCalculator.ts` - [ ] ขยายความครอบคลุมของเส้นทางสำหรับการจัดการพร็อกซีและ branch ของการตั้งค่า ### ระยะที่ 4: 70% -> 75% - [ ] ครอบคลุมตัวช่วยแปลและเส้นทางหลักของการแปล: - `open-sse/translator/index.ts` - `open-sse/translator/helpers/*` - `open-sse/translator/request/*` - `open-sse/translator/response/*` ### ระยะที่ 5: 75% -> 80% - [ ] เพิ่มการทดสอบระดับ handler สำหรับ: - `open-sse/handlers/chatCore.ts` - `open-sse/handlers/responsesHandler.js` - `open-sse/handlers/imageGeneration.js` - `open-sse/handlers/embeddings.js` - [ ] เพิ่มความครอบคลุมของ branch ใน executor สำหรับการยืนยันตัวตนเฉพาะผู้ให้บริการ การลองใหม่ และการเขียนทับ endpoint ### ระยะที่ 6: 80% -> 85% - [ ] รวมชุดทดสอบกรณีขอบเพิ่มเติมเข้าในเส้นทางความครอบคลุมหลัก - [ ] เพิ่มความครอบคลุมของฟังก์ชันสำหรับโมดูล DB ที่มีความครอบคลุมของ constructor/ตัวช่วยต่ำ - [ ] ปิดช่องว่างของ branch ใน `settings.ts`, `registeredKeys.ts`, `validation.ts` และตัวช่วยแปล ### ระยะที่ 7: 85% -> 90% - [ ] ถือว่าไฟล์ที่ยังมีความครอบคลุมต่ำเป็นตัวขัดขวางการดำเนินงาน - [ ] เพิ่มการทดสอบการถดถอยสำหรับบั๊กในโค้ดโปรดักชันทุกจุดที่ได้รับการแก้ไขระหว่างการผลักดันความครอบคลุมไปสู่ 90% - [ ] เพิ่มเกณฑ์ความครอบคลุมใน CI หลังจากค่าพื้นฐานในเครื่องมีความเสถียรติดต่อกันอย่างน้อยสองรอบเท่านั้น ## นโยบาย Ratchet อัปเดตเกณฑ์ของ `npm run test:coverage` หลังจากที่โปรเจกต์ผ่านเป้าหมายขั้นถัดไปจริง ๆ โดยมีระยะเผื่อที่เพียงพอเท่านั้น **เกณฑ์ปัจจุบัน:** `npm run test:coverage` บังคับใช้เกณฑ์ **60 statements / 60 lines / 60 functions / 60 branches** (เมตริกได้รับการปรับฐานใหม่ใน Quality-Gates ระยะ 6A.1 — ค่าฐานเดิมที่ 82.58% สูงเกินจริง เนื่องจากนับรวมไฟล์ทดสอบและไม่รวม `open-sse`) คำสั่ง `test:coverage:legacy` ยังคงเก็บเมตริกเดิม 50/50/50 ไว้เพื่อใช้เปรียบเทียบย้อนหลัง สำหรับการตรวจสอบเกณฑ์แบบเฉพาะกิจจากรายงานล่าสุด ให้ใช้: ```bash node scripts/check/test-report-summary.mjs --threshold 75 ``` ลำดับ Ratchet ที่แนะนำ (เรียงตาม `statements-lines / branches / functions`): 1. 55/60/55 2. 60/62/58 3. 65/64/62 4. 70/66/66 5. 75/70/72 <-- เกณฑ์ปัจจุบัน (75/70/75) 6. 80/75/78 7. 85/80/84 8. 90/85/88 เป้าหมาย Ratchet ถัดไปคือ `80/75/78` เมื่อความครอบคลุมของ branch สูงกว่า 78% ติดต่อกันสองรอบ ## ช่องว่างที่ทราบ คำสั่งวัดความครอบคลุมปัจจุบันวัดชุด unit test หลักของ Node และรวมซอร์สที่ถูกเรียกใช้จากชุดดังกล่าว ซึ่งรวมถึง `open-sse` แต่ยังไม่ได้รวมความครอบคลุมของ Vitest เข้าเป็นรายงานเดียวแบบครบวงจร การรวมดังกล่าวควรทำในภายหลัง แต่ไม่ใช่อุปสรรคต่อการเริ่มเพิ่มความครอบคลุมจาก 60% -> 80%