skills/test-assertion-design/SKILL.md
Assertion design judgment framework for flaky and design-quality issues. Use when writing tests, reviewing assertions, diagnosing flaky tests, or deciding if a timing/float/cache assertion is appropriate. Do NOT use for API syntax or refactoring.
npx skillsauth add tarrragon/claude test-assertion-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
斷言設計判斷概念框架。職責:識別「此斷言設計是否合理」,提供跨語言判斷標準。不提供測試寫法或重構步驟。
設計或審查斷言時,依序回答三個問題。任一問題答「否」即進入對應的類型判斷:
| 問題 | 判斷標準 | 「否」時對應類型 | |------|---------|----------------| | 確定性 | 同一程式碼在任何執行環境下,pass/fail 結果一致? | 類型 1–6(確定性失效) | | 聚焦性 | 此測試案例只驗證一個行為面向? | 類型 8–9(設計問題) | | 隔離性 | 此測試不依賴其他測試建立的狀態或執行順序? | 類型 7(隔離違反) |
以下 4 種確定性斷言類型符合三問標準,可直接放功能測試套件:
| 確定性類型 | 說明 | |-----------|------| | 功能正確性 | 輸出值直接比對固定預期值 | | 邏輯不變式 | 驗證數學/邏輯關係(a < b、rate < 1.0),兩側均非環境依賴值 | | 結構驗證 | 驗證欄位存在、型別正確、陣列長度 | | 資源清理 | 驗證洩漏偵測差值(前後 count 差值 = 0),用差值而非絕對值 |
9 類型問題依問題本質分為兩族(partition,互斥):
此分族與斷言品質三問為不同視角:三問是快速分流入口(任一否即識別問題族群);分族是依問題本質歸類(幫助理解根因、選擇對應設計原則)。
| 類型 | 問題本質 | 識別信號 | 設計原則 | 來源 |
|------|---------|---------|---------|------|
| 1. 計時硬門檻 | 使用單次計時值與絕對毫秒數比較作為 pass/fail | 計時差值對比 N ms 常數 | 受機器負載影響;功能測試套件禁用;效能門檻移至隔離執行環境 | W1-017 + W1-018 實證 |
| 2. 高精度浮點 | 浮點計算結果用超過 2 位小數精度斷言 | toBeCloseTo(x, numDigits) 其中 numDigits 超過 2 | IEEE 754 浮點路徑在跨 JIT 環境下末位數字不保證一致;超過 2 位精度需附確定性計算理由 | W1-017 + W1-018 實證 |
| 3. 相對計時比較 | 以兩次執行時間的差距或倍數比較驗證快取效果 | secondRunTime < firstRunTime * K | 相對計時同樣受 GC/JIT 影響;改用快取命中率或物件參考等價(identity equality)驗證 | W1-017 + W1-018 實證 |
| 4. 記憶體絕對值 | 用堆積記憶體使用絕對上限作為 pass/fail | heapUsed < N MB 在功能測試套件 | 記憶體使用受 GC 時機影響;改用前後差值偵測洩漏(差值 = 0)而非絕對上限 | W1-017 + W1-018 實證 |
| 5. 非同步時序 | 斷言非同步操作尚未完成時的中間狀態 | 斷言位置在觸發事件之後但等待機制之前;結果隨執行速度改變 | 等待最終狀態再斷言;等待機制因框架而異但「等完成再斷言」原則跨語言一致 | W1-024 推導 |
| 6. 亂數輸出 | 斷言由不可控隨機源驅動的特定輸出值 | 斷言依賴具體的隨機生成值(特定 ID、特定排序、特定分組) | 隨機源必須可控;斷言驗證演算法行為(分佈特性、邊界條件),不斷言特定隨機輸出 | W1-024 推導 |
| 7. 測試隔離違反 | 測試依賴其他測試建立的副作用或特定執行順序 | 測試單獨執行通過但全套件執行失敗;測試順序改變影響 pass/fail | 每個測試自建前置條件,teardown 還原所有共享狀態;隔離違反問題跨語言同形 | W1-024 推導 |
| 8. 快照過度覆蓋 | 快照比對整體輸出結構,非業務相關的格式變更觸發 false positive | 修改一個不相關欄位或樣式,整個快照紅燈 | 快照粒度匹配驗證意圖;業務邏輯驗收用欄位/屬性斷言,全結構快照只用於偵測非預期變更 | W1-024 推導 |
| 9. 斷言過度集中 | 單一測試案例驗證多個行為面向,前面的斷言失敗遮蔽後面的 | 一個 test case 驗 10 個以上屬性,或測試名稱難以用單一行為描述 | 一測試案例一行為面向;斷言數量與被測行為的複雜度成比例,不與輸出結構大小成比例 | W1-024 推導 |
此 skill 提供判斷概念,以下內容屬下游層級,不在此 skill 範圍:
| 不在範圍的內容 | 所在層級 |
|--------------|---------|
| 具體測試寫法(toBeLessThan、pumpAndSettle、testing.T) | 語言/框架文件 |
| 重構步驟(如何將計時斷言改為功能斷言) | 實作代理人職責 |
| 精度數字規定(numDigits <= 2)、目錄結構規定(tests/perf/) | 專案 rules 層 |
| 效能測試 SLA 門檻設定 | 專案決策層 |
專案 rules 層:.claude/rules/core/test-assertion-design-rules.md(本專案 Chrome Extension/JS/Jest 專屬規則)
各類型在不同專案中有脈絡差異。讀取對應 reference 取得輕量提示:
| 情境 | 讀取 reference |
|------|--------------|
| WEB 類專案(JS/TS + Jest/Vitest/Playwright) | references/web-testing-context.md |
| APP 類專案(Flutter/React Native) | references/app-testing-context.md |
| 後端類專案(Go/Python/Node.js 服務) | references/backend-testing-context.md |
此 skill 與同主題層級的正交性(定位依據:三者職責不重疊):
| 層級 | 職責 |
|------|------|
| test-assertion-design skill(本檔) | 斷言內容設計的判斷概念(驗什麼、設計是否合理),跨語言通用 |
| tdd skill | TDD 流程管理(Red/Green/Refactor 階段推進) |
| test-async-guardian skill | 非同步資源清理的生命週期防護(清理洩漏,非斷言設計) |
| .claude/rules/core/test-assertion-design-rules.md | 本專案(Chrome Extension/JS/Jest)專屬規則,含具體精度數字與目錄規定 |
Last Updated: 2026-05-21 Version: 1.2.0 — 第 2 輪審查:三問「確定性」對應標籤由「環境依賴」改為「確定性失效」(類型 5-6 屬設計族)。1.1.0:F2-F5 修正(W1-027 第 1 輪審查)
development
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
development
Claude Code release notes 框架影響評估工具。比對 last-reviewed 版本篩出新版本,逐項分類(對框架有幫助 / 需評估 / 無影響 / 不適用),對採用項引導建 ANA + WRAP + spawn 落地。Use when: 執行 /release-notes 看到新版本、定期檢查 CC 更新、評估新功能對專案框架的影響時。Triggers: release notes, release-notes, CC 更新, claude code 更新, 版本更新評估, 新功能評估, 框架影響評估。
tools
Chrome Extension 實機測試與 debug 工作流,以 chrome-devtools-mcp 為核心工具。Use when: (1) 完成功能後實機驗證 / manual test / 試看看 / 跑看看 / verify feature, (2) extension debug / popup 不作動 / content script 不注入 / service worker 報錯 / background 出問題, (3) 安裝 unpacked extension / load unpacked / 載入未封裝, (4) 看 console / 看 network / 看 log / view console / inspect requests, (5) 功能更新後重新載入 extension / rebuild reload / reload extension。涵蓋 Manifest V3 service worker / content script / popup / options page 的 chrome-devtools-mcp 工具呼叫流程。不取代 Puppeteer / Playwright 自動化 E2E(CI 用),定位為開發期手動驗證與 LLM-assisted debug。
testing
從需求確認到實作的對話協議:模糊指令澄清(含篩選類)、可決定 vs 該確認的邊界、失敗 2 次的轉折、覆寫成本告知、revert/checkpoint 處理、漸進驗證、工具切換時機。Triggers: 收到模糊指令, 自決還是確認, 反覆失敗, 換思路, 覆寫成本, 先還原, 先重來, placeholder, 最小範圍, 推理失敗, playwright 切換, 開發前澄清, 需求確認, 排除障礙, 逼近答案, 依 X 篩選, 只看 X, filter 範圍, 呈現決策, 開放問, ABCDE 你選哪個, 反省題, retrospective, 下一步往哪走, 五維度, 需要我繼續嗎, 要做嗎, OK 嗎, yes/no, 二選, 確認嗎.