此前所有存量测试用 SaveDbDriver mock——真实 SQL 方言链从未被 vitest 覆盖(唯一 GUI 冒烟因环境不可用); 本测试直接注入 MeSqlark memory 后端:saveState→list→loadState→resume advance→exportAll→slot 管理面/remove; 为 0.1.36 三问题(推进崩溃/存档丢失)提供真实存储链防线;+1 套件
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
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)
|
||
})
|
||
})
|