// 单元测试:kaleidoscope lab 后端(sqlite 方案 CRUD + 路由) // 运行:node dev_test_scripts/unit/test_kaleidoscope_db.js // 说明:直接调用 db.js 验证 CRUD;再挂载 express 验证路由层(无上游守卫,仅测路由本身) const path = require('path') const http = require('http') const express = require(path.join(process.cwd(), 'node_modules', 'express')) const db = require(path.join(process.cwd(), 'src', 'server', 'thought_lab', 'labs', 'kaleidoscope', 'db.js')) const kaleido = require(path.join(process.cwd(), 'src', 'server', 'thought_lab', 'labs', 'kaleidoscope', 'index.js')) let fail = 0 const check = (name, cond, extra) => { console.log(`${cond ? 'PASS' : 'FAIL'} - ${name}${extra ? ' | ' + extra : ''}`) if (!cond) fail++ } // ---- 1) db 层 CRUD ---- const created = db.createScheme({ name: '测试方案A', params: { segments: 8, mirror: true }, seed: 42 }) check('create 返回 id 与北京时间戳', !!created.id && /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(created.created_at), JSON.stringify(created.created_at)) const updated = db.updateScheme(created.id, { name: '测试方案A改', params: { segments: 12 }, seed: 43 }) check('update 生效', updated && updated.name === '测试方案A改' && updated.params.segments === 12) const listed = db.listSchemes() check('list 包含新建方案', listed.some(s => s.id === created.id)) const got = db.getScheme(created.id) check('get 单条一致', got && got.seed === 43) // ---- 2) 路由层 ---- const app = express() app.use(express.json()) kaleido.bindRoutes(app) const server = app.listen(0, async () => { const port = server.address().port const req = (method, p, body) => new Promise((resolve, reject) => { const data = body ? JSON.stringify(body) : null const r = http.request({ host: '127.0.0.1', port, path: p, method, headers: data ? { 'Content-Type': 'application/json' } : {} }, res => { let b = '' res.on('data', c => { b += c }) res.on('end', () => resolve({ status: res.statusCode, body: b })) }) r.on('error', reject) if (data) r.write(data) r.end() }) try { const m = await req('GET', '/api/thought_lab/kaleidoscope/meta') check('meta 返回 ui_mode', m.status === 200 && JSON.parse(m.body).ui_mode === 'debug', m.body) const c = await req('POST', '/api/thought_lab/kaleidoscope/schemes', { name: '路由方案', params: { tube: 0.5 }, seed: 7 }) const cj = JSON.parse(c.body) check('POST 创建成功', c.status === 200 && cj.ok && cj.scheme.id > 0) const bad = await req('POST', '/api/thought_lab/kaleidoscope/schemes', { name: '', params: {} }) check('空名称 400', bad.status === 400) const u = await req('PUT', `/api/thought_lab/kaleidoscope/schemes/${cj.scheme.id}`, { name: '路由方案2', params: { tube: 0.6 }, seed: 8 }) check('PUT 更新成功', u.status === 200 && JSON.parse(u.body).scheme.name === '路由方案2') const l = await req('GET', '/api/thought_lab/kaleidoscope/schemes') check('GET 列表包含路由方案', JSON.parse(l.body).schemes.some(s => s.id === cj.scheme.id)) const d = await req('DELETE', `/api/thought_lab/kaleidoscope/schemes/${cj.scheme.id}`) check('DELETE 成功', d.status === 200) } catch (e) { fail++ console.log('FAIL - 请求异常 |', e.message) } // 清理本测试创建的 db 记录 try { db.deleteScheme(created.id) } catch {} server.close() console.log(fail === 0 ? 'ALL PASS' : `${fail} FAILED`) process.exit(fail === 0 ? 0 : 1) })