import {test} from 'node:test'; import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import {runInNewContext} from 'node:vm'; import {PGlite} from '@electric-sql/pglite'; test('排课学员姓名跳过空白字段,兼容旧昵称、预约标题和缺失资料',async()=>{ const expression=runInNewContext(readFileSync(new URL('../cloud/mobile-teaching.js',import.meta.url),'utf8')+';companionStudentNameSql()'); const db=new PGlite();try{ const rows=[['小徐','','{}','其他(60分钟练习)','login','小徐'],['',' ','{"HoneyName":"花花"}','其他(60分钟练习)','login','花花'],['','','{}','张雅茜(60分钟练习)','login','张雅茜'],[null,null,'{}','',null,'学员 213']]; for(const [realName,nickname,legacy,title,username,expected]of rows){const result=await db.query(`SELECT ${expression} AS name FROM (SELECT $1::text "realName",$2::text nickname,$3::jsonb "legacyUserData",$5::text username) u CROSS JOIN (SELECT $4::text title) c CROSS JOIN (SELECT '213'::text szyh) a`,[realName,nickname,legacy,title,username]);assert.equal(result.rows[0].name,expected);} }finally{await db.close();} });