訂明本例驗收任務
假設讀取任務明訂須取欄位集合。擬用呼叫須一樣,不能漏、不能多,欄位也不能重複。讀資料前先列三類錯誤;所需欄位是本例任務範圍,不自行推定權限政策。
- 保留所需欄位集合
- 核欠、多及重複欄位
- 讀取前保留無效提議
欄位不符先改計劃,不去取額外欄。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 多取備註欄 | {"required":["id","state"],"requested":["id","state","internalNote"]} | {"extra":["internalNote"],"missing":[],"duplicates":[],"valid":false} | internalNote 超出所列讀取欄位。 |
| 欄位一樣而次序不同 | {"required":["id","state"],"requested":["state","id"]} | {"extra":[],"missing":[],"duplicates":[],"valid":true} | 本例欄位集合無序,兩個都齊。 |
| id 重複且欠 state | {"required":["id","state"],"requested":["id","id"]} | {"extra":[],"missing":["state"],"duplicates":["id"],"valid":false} | 兩次 id 不能代替 state,也違反不重複要求。 |
逐步處理 duplicate-missing 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"extra":[],"missing":["state"],"duplicates":["id"],"valid":false}。兩次 id 不能代替 state,也違反不重複要求。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
const required=[...new Set(x.required)].sort(),requested=[...new Set(x.requested)].sort();const duplicates=requested.filter(k=>x.requested.filter(v=>v===k).length>1);
const extra=requested.filter(k=>!required.includes(k)),missing=required.filter(k=>!requested.includes(k));return {extra,missing,duplicates,valid:extra.length+missing.length+duplicates.length===0};
}
const cases = [
{
"id": "extra-note",
"input": {
"required": [
"id",
"state"
],
"requested": [
"id",
"state",
"internalNote"
]
},
"expected": {
"extra": [
"internalNote"
],
"missing": [],
"duplicates": [],
"valid": false
}
},
{
"id": "exact-projection",
"input": {
"required": [
"id",
"state"
],
"requested": [
"state",
"id"
]
},
"expected": {
"extra": [],
"missing": [],
"duplicates": [],
"valid": true
}
},
{
"id": "duplicate-missing",
"input": {
"required": [
"id",
"state"
],
"requested": [
"id",
"id"
]
},
"expected": {
"extra": [],
"missing": [
"state"
],
"duplicates": [
"id"
],
"valid": false
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
欄位清單可作本機計劃驗收表。此項通過與登入、權限及回傳值正確與否分開。