/** * markdown.ts Markdown 渲染器单元测试 * * 重点覆盖: * 1. 基础语法正确性(标题、粗体、斜体、列表、链接、引用、代码) * 2. XSS 防护(先转义再转换、链接白名单 http/https) */ import { describe, it, expect } from 'vitest'; import { renderMarkdown } from '../src/markdown'; describe('renderMarkdown - 基础语法', () => { it('空字符串返回空', () => { expect(renderMarkdown('')).toBe(''); }); it('null/undefined 返回空', () => { expect(renderMarkdown(null as never)).toBe(''); expect(renderMarkdown(undefined as never)).toBe(''); }); it('普通文本渲染为段落', () => { expect(renderMarkdown('你好世界')).toContain('

你好世界

'); }); it('标题渲染 h1-h6', () => { expect(renderMarkdown('# 标题一')).toContain('

'); expect(renderMarkdown('## 标题二')).toContain('

'); expect(renderMarkdown('### 标题三')).toContain('

'); }); it('粗体渲染', () => { expect(renderMarkdown('**粗体文本**')).toContain('粗体文本'); }); it('斜体渲染', () => { expect(renderMarkdown('*斜体文本*')).toContain('斜体文本'); }); it('删除线渲染', () => { expect(renderMarkdown('~~删除文本~~')).toContain('删除文本'); }); it('无序列表渲染', () => { const result = renderMarkdown('- 项目一\n- 项目二'); expect(result).toContain('