跳至內容
Astera Technology

選填區塊要按選擇顯示,零也有意思

區塊有沒有要獨立訂,不能把零當成沒有。

下載完整個案資料及參考答案 ↓

訂判斷及所需輸入

本例文件有啟用選擇及數值兩項。選擇是、數值零,Allowance 區塊仍須顯示 0;選擇否、數值七,整塊不顯示。只看數字真假,兩個判斷都會錯。

已填本地測試工作表
情況輸入 JSON
原例測試{"enabled":true,"value":0}
下載可編輯 CSV ↓

跑所附比較

程序真正呈現瀏覽器文件,查區塊存在與輸出文字,核的是生成結構,不只是工作表內的一個真假值。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"sectionPresent":false,"value":null}
所需路徑{"sectionPresent":true,"value":"0"}
下載可編輯 CSV ↓
Node24.14.1 程序;須 Playwright1.63 Chromium
import assert from 'node:assert/strict';
import {createRequire} from 'node:module';
const htmlEscape=s=>String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
async function withPage(action,options={}){
  const require=createRequire(import.meta.url);const {chromium}=require('playwright');
  const browser=await chromium.launch({headless:true});
  try{const context=await browser.newContext(options);const page=await context.newPage();
    const requests=[];await page.route('**/*',route=>{requests.push(route.request().url());return route.abort();});
    return await action(page,context,requests);
  }finally{await browser.close();}
}

const run=async function run(i,corrected=true){
    if(typeof i.enabled!=='boolean')return {held:true};
    if(i.enabled&&!Number.isFinite(i.value))return {held:true};
    return withPage(async page=>{const show=corrected?i.enabled:!!i.value;await page.setContent('<main>'+ (show?'<section id="bonus"><h2>Allowance</h2><output>'+htmlEscape(i.value)+'</output></section>':'')+'</main>');
      return page.evaluate(()=>({sectionPresent:!!document.querySelector('#bonus'),value:document.querySelector('output')?.textContent??null}));});
  };
const cases=[{"input":{"enabled":true,"value":0},"corrected":false,"expected":{"sectionPresent":false,"value":null}},{"input":{"enabled":true,"value":0},"corrected":true,"expected":{"sectionPresent":true,"value":"0"}},{"input":{"enabled":false,"value":7},"corrected":true,"expected":{"sectionPresent":false,"value":null}},{"input":{"enabled":null,"value":0},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

否加七仍不顯示;選擇 null 先停,不把未決定當成要藏零。

  1. 取明確區塊選擇
  2. 呈現或省略整塊
  3. 數值與結構各自核

選擇未知,生成文件前先暫停。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
關閉但數值非零{"enabled":false,"value":7}{"sectionPresent":false,"value":null}
區塊選擇未知{"enabled":null,"value":0}{"held":true}
下載可編輯 CSV ↓

原例選擇啟用、值零,應看到甚麼?

查看參考答案

一個 Allowance 區塊,值為 0。是否存在沿啟用選擇,數值則獨立保留。

相關資源