---
title: "รายงาน Unit Test Coverage"
titleEn: "Unit Test Coverage Report"
clauses: ["4.7.3"]
phase: 2
category: "รายงานอัตโนมัติ"
generated: true
generatedAt: "2026-10-03T02:26:29Z"
---

> สร้างอัตโนมัติเมื่อ 2026-10-03T02:26:29Z

# รายงาน Unit Test Coverage

**อ้างอิง TOR:** ข้อ 4.7.3 (Unit Test Coverage ≥ 80% ไม่นับไฟล์ config)

รายงานนี้สร้างโดย `scripts/reports/coverage-report.ts` (`npm run report:coverage`) จากผลจริงของ `vitest run --coverage` (provider v8) — ขอบเขตการวัดตาม `vitest.config.ts`: โค้ด business logic ใน `src/domain/**` และ use case ใน `src/application/**` (ไม่นับไฟล์ config, `index.ts` และ `*.d.ts`)

## 1. สรุปผล

| รายการ | ค่า |
|---|---|
| ผลตาม TOR 4.7.3 | **ผ่าน — lines 97.9%, statements 95.7% (เกณฑ์ ≥ 80%)** |
| วันที่วัด | 2026-10-03T02:26:29Z |
| จำนวนไฟล์ที่อยู่ในขอบเขต | 44 ไฟล์ (src/domain 21, src/application 23) |
| Test cases | ผ่าน 907 · ล้มเหลว 3 (รวม 910) |
| Test files | ผ่าน 50 · ล้มเหลว 3 (รวม 53) |
| เวลาที่ใช้รันชุดทดสอบ | 30 วินาที |

> มี test ล้มเหลว 3 รายการในรอบนี้ — coverage ด้านล่างวัดจากการรันรอบเดียวกัน (`--coverage.reportOnFailure`) ต้องแก้ test ที่ล้มเหลวและรันรายงานนี้ใหม่ก่อนใช้เป็นหลักฐานตรวจรับ

## 2. Coverage รวมตามขอบเขต

| ขอบเขต | Lines | Statements | Functions | Branches |
|---|---:|---:|---:|---:|
| `src/domain` | 99.7% (930/933) | 99.0% (1,124/1,135) | 99.5% (193/194) | 95.1% (682/717) |
| `src/application` | 96.7% (1,439/1,488) | 93.8% (1,804/1,923) | 95.9% (420/438) | 81.1% (1,126/1,389) |
| **รวม (เกณฑ์ TOR)** | 97.9% (2,369/2,421) | 95.7% (2,928/3,058) | 97.0% (613/632) | 85.8% (1,808/2,106) |

เกณฑ์: lines และ statements รวมของ `src/domain` + `src/application` ≥ 80% (vitest.config.ts ตั้ง threshold เพิ่มเติม: lines/functions/statements 80%, branches 75% — ถ้าต่ำกว่า `npm run test:coverage` จะล้มเหลวใน CI)

| ตัวชี้วัด | ค่ารวม | ≥ 80% |
|---|---:|---|
| lines | 97.9% (2,369/2,421) | ผ่าน |
| statements | 95.7% (2,928/3,058) | ผ่าน |
| functions | 97.0% (613/632) | ผ่าน |
| branches | 85.8% (1,808/2,106) | ผ่าน |

## 3. Coverage รายไฟล์ (เรียงจากต่ำสุด)

| ไฟล์ | Lines | Statements | Functions | Branches |
|---|---:|---:|---:|---:|
| `src/application/privacy/purge.ts` | 50.0% | 52.0% | 50.0% | 43.8% |
| `src/application/config/pricing-usecases.ts` | 88.2% | 83.3% | 88.9% | 70.8% |
| `src/application/evaluation/runner.ts` | 88.5% | 83.8% | 92.9% | 62.3% |
| `src/application/chat/ask.ts` | 90.3% | 90.5% | 75.0% | 75.0% |
| `src/application/identity/auth-usecases.ts` | 91.3% | 91.8% | 100.0% | 82.4% |
| `src/application/privacy/privacy-usecases.ts` | 95.4% | 92.4% | 94.1% | 81.5% |
| `src/application/config/prompt-usecases.ts` | 95.8% | 93.5% | 100.0% | 64.6% |
| `src/application/evaluation/reports.ts` | 96.8% | 90.7% | 90.5% | 72.5% |
| `src/application/evaluation/run-registry.ts` | 96.9% | 87.5% | 90.0% | 64.3% |
| `src/application/config/ai-config-usecases.ts` | 97.3% | 91.7% | 97.5% | 79.8% |
| `src/application/config/guardrail-usecases.ts` | 97.5% | 98.0% | 100.0% | 78.9% |
| `src/domain/evaluation/scorers.ts` | 98.3% | 96.8% | 97.6% | 93.7% |
| `src/application/evaluation/datasets.ts` | 98.7% | 93.9% | 95.8% | 82.1% |
| `src/application/config/shared.ts` | 100.0% | 83.3% | 100.0% | 75.0% |
| `src/application/ops/backup.ts` | 100.0% | 93.8% | 100.0% | 71.0% |
| `src/application/ops/defects.ts` | 100.0% | 96.4% | 100.0% | 94.6% |
| `src/domain/retrieval/synonyms.ts` | 100.0% | 97.4% | 100.0% | 95.9% |
| `src/domain/retrieval/bm25.ts` | 100.0% | 98.2% | 100.0% | 94.4% |
| `src/application/ops/data-destruction.ts` | 100.0% | 98.5% | 100.0% | 85.2% |
| `src/domain/ai/guardrail-policy.ts` | 100.0% | 99.0% | 100.0% | 92.7% |
| `src/application/ops/dashboard.ts` | 100.0% | 99.4% | 100.0% | 82.5% |
| `src/application/identity/admin-user-usecases.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/application/ingestion/coverage.ts` | 100.0% | 100.0% | 100.0% | 94.3% |
| `src/application/ingestion/kb-admin.ts` | 100.0% | 100.0% | 100.0% | 90.0% |
| `src/application/ops/range-query.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/application/ops/range.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/application/report/sla.ts` | 100.0% | 100.0% | 100.0% | 94.2% |
| `src/domain/ai/citation.ts` | 100.0% | 100.0% | 100.0% | 95.8% |
| `src/domain/ai/token-budget-policy.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/audit/hash-chain.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/config/ai-config.ts` | 100.0% | 100.0% | 100.0% | 87.9% |
| `src/domain/identity/lockout-policy.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/identity/password-policy.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/identity/rbac.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/ingestion/chunking-policy.ts` | 100.0% | 100.0% | 100.0% | 95.4% |
| `src/domain/ingestion/sanitize.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/privacy/pii-masking.ts` | 100.0% | 100.0% | 100.0% | 97.4% |
| `src/domain/report/sla-policy.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/retrieval/embedding.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/retrieval/heuristic-reranker.ts` | 100.0% | 100.0% | 100.0% | 87.5% |
| `src/domain/retrieval/relevance-scoring.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/retrieval/rrf.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/retrieval/tokenizer.ts` | 100.0% | 100.0% | 100.0% | 100.0% |
| `src/domain/retrieval/types.ts` | – | – | – | – |

`–` = ไฟล์ไม่มีรายการชนิดนั้นให้วัด (เช่นไฟล์ที่มีแต่ type หรือค่าคงที่)

ไฟล์ที่ lines ต่ำกว่า 80%: 1 ไฟล์ — เป็นลำดับแรกที่ควรเพิ่ม unit test

## วิธีรันซ้ำ

```bash
npm run report:coverage                    # รันชุดทดสอบทั้งหมดพร้อม coverage แล้วสร้างรายงานนี้
npm run test:coverage                      # รันพร้อม coverage + threshold gate (ใช้ใน CI)
npx tsx scripts/reports/coverage-report.ts --from-existing --log=vitest.log   # สร้างรายงานจากผลที่รันไว้แล้ว
```

รายงาน HTML รายบรรทัด: `npx vitest run --coverage` แล้วเปิด `coverage/index.html`
