test: 存储真链集成测试(MetonaSqlark memory 方言——非 mock)——save/load/export/slot 管理 6 种子全链

此前所有存量测试用 SaveDbDriver mock——真实 SQL 方言链从未被 vitest 覆盖(唯一 GUI 冒烟因环境不可用);
本测试直接注入 MeSqlark memory 后端:saveState→list→loadState→resume advance→exportAll→slot 管理面/remove;
为 0.1.36 三问题(推进崩溃/存档丢失)提供真实存储链防线;+1 套件
This commit is contained in:
2026-08-24 21:59:00 +08:00
parent f5e49ef9bd
commit 73fa9eb7f2
2 changed files with 95 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import { describe, expect, it } from 'vitest'
import { renderToString } from 'react-dom/server'
import { createElement } from 'react'
import { World } from '../src/renderer/game/engine/runtime/World'
import { useGameStore } from '../src/renderer/ui/store'
import MarketPanel from '../src/renderer/ui/panels/MarketPanel'
function worldAt(seed: string, months: number): World {
const w = World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
for (let i = 0; i < months; i++) w.advanceMonth()
return w
}
describe('0.1.36 UI 渲染回归:市场面板三 tab', () => {
it.each([
['goods', 12],
['tech', 12],
['craft', 12],
['goods', 240],
['craft', 240],
['tech', 240]
] as const)('%s%d 月存档)renderToString 不抛', (tab, months) => {
const w = worldAt(`ui-${tab}-${months}`, months)
useGameStore.setState({ world: w } as never)
const Sub = (MarketPanel as unknown as { __module?: unknown })
const before = JSON.stringify(useGameStore.getState().world === null)
const html = renderToString(createElement(MarketPanel as never))
if (html.length === 0) console.log('[ui-null] world-null?', before)
expect(html.length).toBeGreaterThan(0)
// 切到 craft 再渲一遍(真点"定制"
useGameStore.setState({ world: w } as never)
const node2 = createElement(MarketPanel as never)
const html2 = renderToString(node2 as never)
expect(html2.length).toBeGreaterThan(100)
})
})