生活分享
測試、Code Review 與 PR
測試確認程式在指定條件的行為,Code Review 檢查變更是否有遺漏或風險,PR 則讓人查看並討論要合併的差異。三者互補;通過測試不等於審查通過,開 PR 也不是已合併。
閱讀時間約 15 分鐘 · 操作 30 分鐘

返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
目標與準備
本段提到的教學與資源: Git 入門Git、分支、diff 與還原Git 保存檔案版本,分支承接一組修改,diff 顯示差異。Codex 可以協助操作,但你仍要確認修改屬於這次任務。聊天紀錄與 Git 歷史不同,恢復舊對話不會自動還原檔案。閱讀全文
測試回答已寫出的案例是否符合期待,Review 檢查修改是否帶來遺漏的風險與行為差異,PR 則讓指定分支的成果可以被其他人審閱。三者不能互相代替;沒有發現問題不是證明不可能有問題,PR 已開啟也不表示已合併、部署或公開。這次會讓你親自看見測試覆蓋範圍的空缺。
步驟 1:建立故意有問題的提案
建立新的 codex-review-lab,複製 expected 的五個檔案,依 Git 篇用本機練習身分初始化 main 並提交五檔基準。確認工作目錄乾淨後執行下面命令建立分支。不要使用剛才仍有未完成變更的庫;在新的副本操作才能判斷本次差異來自哪裡。
git switch -c codex/review-lab
node --test core.test.mjs
原測試應 3 項全過。現在只在 core.mjs 的 visibleTasks 最後一行,把 return tasks; 改成 return tasks.reverse();,不要改其他函式。再跑同一測試,仍應全過,因為既有篩選案例只斷言 Active 與 Completed,沒有直接檢查 All 的順序。這是故意製造的待審修改,還不能提交或當成功功能使用。
git diff -- core.mjs
node --test core.test.mjs
步驟 2:選對 Review 範圍
桌面版開啟本 Git 專案,先在 Review 面板選 Unstaged,確認看到剛改的 core.mjs,再於 Codex 輸入框使用 /review,核對所選差異。CLI 先從 codex-review-lab 的系統終端機執行 codex,確認工作目錄後,在互動輸入框使用 /review,選 Review uncommitted changes;不要把 /review 打在系統 shell。此處還沒 commit,只審某個已提交版本會漏掉 reverse。入口與範圍依官方 Code review 文件核對。
桌面版另有 Staged、Commit、Branch、Last turn,不能把 Last turn 當整個分支。CLI 的未提交審查包含已暫存、未暫存與未追蹤內容,範圍比單看 git diff 更廣。Review 面板也可能呈現你或其他任務留下的改動;多 repository 時先核對選取的庫。若同一檔案既有 staged 又有 unstaged,依Git 篇的 MM 練習Git、分支、diff 與還原Git 保存檔案版本,分支承接一組修改,diff 顯示差異。Codex 可以協助操作,但你仍要確認修改屬於這次任務。聊天紀錄與 Git 歷史不同,恢復舊對話不會自動還原檔案。閱讀全文分別查看,再說明這次要審哪部分。
把「All 必須保留原順序且不能修改輸入」作為補充審查條件。預期的有效發現要指出目前那行 reverse、觸發條件是 All/預設分支、影響是反轉順序且原地改陣列,以及哪些測試沒涵蓋。只有「程式碼品質可改善」沒有位置和具體後果,不是本例可採取行動的發現。
Review the uncommitted change only. All must preserve task order and must not mutate the input array. Existing tests pass, so inspect their coverage rather than treating that as proof.
For each finding, state the file/line, trigger, concrete impact and a verification case. Do not edit, stage, commit or push during this review. If you find no issue, report what you examined and any uncertainty.
如果代理沒指出問題,不要把它的結論當唯一驗收;親自讀 reverse 的用法,接著用下面測試確認。若代理提出錯誤發現,也不要直接照改,要求能重現的輸入與結果。Review 的責任是提供可核對的證據;真正修改要在理解並同意修正後另行交付,保留原始問題與最後差異之間的對照。
步驟 3:補測試並移除錯誤提案
將下列內容新增為 review.test.mjs。第一項檢查 All 的原始順序,第二項用凍結陣列檢查不應嘗試原地修改。先在錯誤版執行兩個檔案,預期原三項通過、新兩項失敗;不要跳過這一步,否則不知道新測試是否真能擋住這種改動。
import test from "node:test";
import assert from "node:assert/strict";
import { visibleTasks } from "./core.mjs";
const makeTasks = () => [
{ id: "a", title: "Read", completed: true },
{ id: "b", title: "Build", completed: false },
];
test("All preserves original order", () => {
assert.deepEqual(visibleTasks(makeTasks(), "all").map((task) => task.id), ["a", "b"]);
});
test("All does not attempt to mutate the input array", () => {
const tasks = Object.freeze(makeTasks());
assert.doesNotThrow(() => visibleTasks(tasks, "all"));
});
node --test core.test.mjs review.test.mjs
接著只把 visibleTasks 最後一行恢復為 return tasks;,保留新測試,再跑應 5 項全過。檢查 git diff:core.mjs 應已回到 main 基準,最終要交付的只有新增 review.test.mjs。這次 Review 阻止了錯誤實作進入提交,同時留下之前缺少的保護;PR 要描述最終的測試補強,不能宣稱程式碼仍有不存在的修正。
步驟 4:整理可審閱的提交與 PR 草稿
只暫存新測試,先看清單與內容再提交。接著用 branch diff 核對 main 到本分支只有 review.test.mjs,檢查命令結果是這個最終版本。若又修改檔案,先重跑受影響測試,不能引用較早版本的全過記錄。下面 PR 文字中的結果只在你真的執行後才能保留。
git add review.test.mjs
git diff --cached --name-only
git diff --cached -- review.test.mjs
git commit -m "Test All filter order and input preservation"
git diff --stat main...HEAD
git status --short
Title: Add regression coverage for All filter ordering and input preservation
The existing filter tests cover Active and Completed but miss All ordering and input mutation. Add two focused cases so a reversing implementation is rejected. Production code is unchanged.
Validation: node --test core.test.mjs review.test.mjs — 5 passed, if actually run.
The deliberate reverse variant fails both new tests.
Browser checks: NOT RUN in this test-only change unless separately verified.
Deployment: not performed.
這時本機交付已具體可審,還沒有 GitHub PR。若要練習外部 PR,在自己的 GitHub 建立空白練習庫,不預先加入 README,複製它實際顯示的遠端網址,再把下面第一行的占位符換成該網址後執行。先核對 remote -v 確實是自己的新庫;後面兩次 push 會把本機基準與測試分支傳到 GitHub。
git remote add origin YOUR_REPOSITORY_URL
git remote -v
git push -u origin main
git push -u origin codex/review-lab
在 GitHub 的 Pull requests 選 New pull request,base 選 main、compare 選 codex/review-lab,檢查 Files changed 只有測試,再貼上整理好的標題與說明,選 Create pull request;仍要討論可用 draft 狀態。沒有設定 CI 的練習庫不會憑空出現測試檢查,有 CI 時要核對它檢查的是目前 head。這一步可先停在 PR,合併與部署各自依專案流程處理。
讓測試紀錄對應到最後版本
完成本機提交後,暫停其他會改這個練習庫的任務,逐行執行下列命令。前後 HEAD 應相同、status 應乾淨、分支應為 codex/review-lab、main...HEAD 應只有 review.test.mjs,測試應 5 過 0 敗且沒有跳過項目。把實際 SHA 和輸出附在交付紀錄。HEAD 相同但檔案還有修改時,測試其實包含未提交內容,不能把結果全算到那個 commit 上。
git branch --show-current
git rev-parse HEAD
git status --short --untracked-files=all
git diff --name-only main...HEAD
node --test core.test.mjs review.test.mjs
git rev-parse HEAD
git status --short --untracked-files=all
依 Git diff 官方說明,main...HEAD 從兩者共同祖先比較到 HEAD;它不會把尚未提交的修改算進去。因此新增 review.test.mjs 但還沒 git add 時,普通 diff 可能空白,仍要看 status 並開檔審查。這裡使用本機 main;正式 PR 要核對實際 base、head 和該 head 的 CI。看到 skipped、cancelled 或測試尚未完成,都分開記錄,不以綠色圖示取代檢查範圍。
常見問題、還原與驗收
| 現象 | 要補的證據 |
|---|---|
| 原測試全過仍有問題 | 新案例先失敗、修正後通過 |
| Review 沒看到差異 | 確認未提交、commit 或 base 範圍 |
| Review 指出問題但說不出原因 | 要求位置、觸發與最小重現 |
| PR 包含其他檔案 | 檢查暫存、分支起點及 base/compare |
| CI 沒出現或看的是舊版本 | 查工作流程是否存在及 head SHA |
| 有人繼續改檔 | 重驗最終差異,不沿用舊結論 |
驗收要保留原三測試漏失問題、新兩測試抓到問題、最終五測試通過的對照,以及只有測試檔的提交。想重做就在同一獨立練習重新引入 reverse,確認失敗後再恢復,不刪除整個 Git 庫或改寫公開歷史。若已開練習 PR 而決定不合併,可在 GitHub 關閉它並保留討論。圖中 1 是測試證據,2 是審查判斷,3 是可核對交付;本篇未替你執行模型 Review、GitHub 推送或公開操作。
返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
閱讀完整文字說明
Tests to Review to PR
同主題延伸閱讀
生活分享
Codex 學習中心:完整教學目錄
從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。
生活分享
Worktree 與多任務隔離
Worktree 讓同一個 Git 程式庫有不同的工作目錄,各自承接不同分支。它適合讓兩項工作分開改檔,但資料庫、連接埠與外部服務仍可能共用,不能把檔案隔離當成所有資源隔離。
生活分享
實戰:製作小網站
從 brief.md 規劃並製作 Small Steps 待辦網站,完成新增、完成、刪除、篩選與本機資料保存。將 HTML、CSS、資料函式、畫面事件與測試分開,以 Node 測試和瀏覽器操作驗收,並留下可重新啟動與還原的交接紀錄。
生活分享
用量與效率:減少重工
記錄任務條件、模型選項、時間與成果,找出能減少無效重試和過多上下文的調整。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Codex review scopes · 查證日期:
- CLI review commands · 查證日期:
- Creating a pull request · 查證日期: