diff --git a/tests/stage5.test.ts b/tests/stage5.test.ts index 28d758d..67993db 100644 --- a/tests/stage5.test.ts +++ b/tests/stage5.test.ts @@ -1,8 +1,17 @@ // 阶段 5 验收:主题注册表完整性、导出 HTML 管线(结构/表格/公式/代码)、HTML 导入转换。 -import { describe, it, expect } from 'vitest' +import { describe, it, expect, vi } from 'vitest' import { DOC_THEMES, docThemeById } from '../src/themes' import { markdownToExportHtml, htmlToMarkdown, exportCss } from '../src/services/exportHtml' +// jsdom 里 mermaid.render 依赖真实 SVG 布局 API 会失败;用桩验证导出管线的 +// 替换与兜底逻辑(真机栅格化 PNG 只能在 Windows 复验) +vi.mock('mermaid', () => ({ + default: { + initialize: () => undefined, + render: async () => ({ svg: '图' }), + }, +})) + describe('文档主题注册表', () => { it('7 套主题 id 唯一且可查', () => { expect(DOC_THEMES).toHaveLength(7) @@ -87,3 +96,14 @@ describe('二轮验收:导出与导入', () => { expect(md).not.toContain('color:red') }) }) + +describe('二轮验收:Mermaid 导出替换', () => { + it('剪贴板版 Mermaid 经桩渲染后不再是代码块(PNG 栅格化失败退回 SVG)', async () => { + const html = await markdownToExportHtml('```mermaid\ngraph TD\n A-->B\n```\n', { + title: 't', themeId: 'default', imageMode: 'embed', forClipboard: true, mermaidPng: true, + highlight: false, + }) + expect(html).toContain('data-stub="mermaid"') + expect(html).not.toContain('language-mermaid') + }) +})