test(export): Mermaid 导出管线桩渲染回归(替换与 PNG 兜底)
jsdom 跑不了 mermaid.render(缺 SVG 布局 API),用 vi.mock 桩验证剪贴板版 Mermaid 被替换为渲染结果而非代码块;全量 80 通过 + 2 跳过。
This commit is contained in:
@@ -1,8 +1,17 @@
|
|||||||
// 阶段 5 验收:主题注册表完整性、导出 HTML 管线(结构/表格/公式/代码)、HTML 导入转换。
|
// 阶段 5 验收:主题注册表完整性、导出 HTML 管线(结构/表格/公式/代码)、HTML 导入转换。
|
||||||
import { describe, it, expect } from 'vitest'
|
import { describe, it, expect, vi } from 'vitest'
|
||||||
import { DOC_THEMES, docThemeById } from '../src/themes'
|
import { DOC_THEMES, docThemeById } from '../src/themes'
|
||||||
import { markdownToExportHtml, htmlToMarkdown, exportCss } from '../src/services/exportHtml'
|
import { markdownToExportHtml, htmlToMarkdown, exportCss } from '../src/services/exportHtml'
|
||||||
|
|
||||||
|
// jsdom 里 mermaid.render 依赖真实 SVG 布局 API 会失败;用桩验证导出管线的
|
||||||
|
// 替换与兜底逻辑(真机栅格化 PNG 只能在 Windows 复验)
|
||||||
|
vi.mock('mermaid', () => ({
|
||||||
|
default: {
|
||||||
|
initialize: () => undefined,
|
||||||
|
render: async () => ({ svg: '<svg data-stub="mermaid"><text>图</text></svg>' }),
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
|
||||||
describe('文档主题注册表', () => {
|
describe('文档主题注册表', () => {
|
||||||
it('7 套主题 id 唯一且可查', () => {
|
it('7 套主题 id 唯一且可查', () => {
|
||||||
expect(DOC_THEMES).toHaveLength(7)
|
expect(DOC_THEMES).toHaveLength(7)
|
||||||
@@ -87,3 +96,14 @@ describe('二轮验收:导出与导入', () => {
|
|||||||
expect(md).not.toContain('color:red')
|
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')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user