fix: jsdoc

This commit is contained in:
2026-05-24 11:14:05 +08:00
parent da9e388a11
commit 8d40f6972b
6 changed files with 179 additions and 17 deletions
+5
View File
@@ -43,12 +43,17 @@ test('CLI runs doctor and scan against one prototype', async () => {
assert.match(doctor.stdout, /ok prototype directory/)
assert.match(contract, /Customer Portal/)
assert.match(contract, /BDD Scenarios/)
assert.match(contract, /Capture Artifacts/)
assert.match(contract, /Browser Evidence/)
assert.match(bdd, /Feature: Customer portal entry/)
assert.match(bdd, /Scenario: 使用者填寫必要資料並送出成功/)
assert.doesNotMatch(contract, /Recommended template/)
assert.equal(spec.pageContract.title, null)
assert.equal(spec.bddContract.feature, 'Customer portal entry')
assert.equal(spec.bddContract.scenarios[0].type, 'application-submit')
assert.match(spec.captureArtifacts.domSummary, /\.ht\/cache\/prototype\/index\/dom-summary\.json$/)
assert.match(spec.captureArtifacts.accessibilityTree, /\.ht\/cache\/prototype\/index\/accessibility-tree\.json$/)
assert.equal(Array.isArray(spec.browserEvidence.externalResourceFailures), true)
assert.deepEqual(pick(spec.pageContract.forms[0].fields[0], ['name', 'label', 'type', 'required']), {
name: 'email',
label: 'Email',
+26 -3
View File
@@ -512,7 +512,7 @@ test('buildBddContract reports scenario candidates and uncovered evidence', () =
}
spec.prototypeGuide = {
description: '使用者登入',
checklist: ['登入失敗時顯示錯誤訊息', '連續錯誤三次鎖定帳號'],
checklist: ['登入失敗時顯示錯誤訊息', '連續錯誤三次鎖定帳號', '支援外部 SSO 導向'],
flowRefs: [{ title: '登入失敗流程', nodes: [{ nodeType: 'error', action: '顯示錯誤訊息' }] }]
}
spec.apiContract = {
@@ -524,14 +524,37 @@ test('buildBddContract reports scenario candidates and uncovered evidence', () =
const markdown = renderBddContract(spec, contract)
assert.ok(contract.candidateScenarios.some((candidate) => candidate.type === 'error-path'))
assert.ok(contract.candidateScenarios.some((candidate) => candidate.source === 'prototypeGuide.checklist' && candidate.evidenceText === '登入失敗時顯示錯誤訊息'))
assert.ok(contract.candidateScenarios.some((candidate) => candidate.source === 'api-error'))
assert.ok(contract.uncoveredEvidence.some((item) => item.source === 'prototypeGuide.checklist' && item.text === '連續錯誤三次鎖定帳號'))
assert.ok(contract.uncoveredEvidence.some((item) => item.source === 'prototypeGuide.checklist' && item.text === '支援外部 SSO 導向'))
assert.ok(!contract.uncoveredEvidence.some((item) => item.text === '登入失敗時顯示錯誤訊息'))
assert.ok(contract.uncoveredEvidence.some((item) => item.source === 'pageContract.actions' && item.text === '忘記密碼'))
assert.equal(contract.requiresHumanReview, true)
assert.match(markdown, /## Candidate Scenarios/)
assert.match(markdown, /登入失敗時顯示錯誤訊息/)
assert.match(markdown, /## Uncovered Evidence/)
assert.match(markdown, /連續錯誤三次鎖定帳號/)
assert.match(markdown, /支援外部 SSO 導向/)
})
test('buildPageContract prefers meaningful rendered labels over fallback control names', () => {
const contract = buildPageContract({
page: 'dynamic-form.html',
source: '/repo/prototype/dynamic-form.html',
html: '<main><input id="email"></main>',
regions: extractRegions('<main><input id="email"></main>'),
domSummary: {
title: null,
headings: [],
buttons: [],
labels: ['Email'],
inputs: [{ tag: 'input', type: 'text', name: 'email', label: 'Email', required: true }],
textSamples: ['Email']
},
screenshotPath: null
})
assert.equal(contract.forms[0].fields[0].label, 'Email')
assert.equal(contract.forms[0].fields[0].required, true)
})
function buildSpec(source, html) {