/** * htmlToMarkdown 转换器测试(v0.6.4 P4-4) * 锁定 Agent 抓取高频结构的输出形态与降级行为。 */ import { describe, it, expect } from 'vitest'; import { htmlToMarkdown } from '../network-utils'; describe('htmlToMarkdown(v0.6.4 P4-4)', () => { it('标题/段落/加粗/链接/图片 基础结构', () => { const md = htmlToMarkdown(`

安装指南

下载 安装包,再看文档

Logo
`); expect(md).toContain('## 安装指南'); expect(md).toContain('**下载**'); expect(md).toContain('[文档](/docs)'); expect(md).toContain('![Logo](/logo.png)'); }); it('em/code 行内标记', () => { const md = htmlToMarkdown('

注意npm i

'); expect(md).toContain('*注意*'); expect(md).toContain('`npm i`'); }); it('pre 代码块保留原文(剥离内部 code 标签的行内包裹)', () => { const md = htmlToMarkdown('
const a = 1;\nconsole.log(a);
'); expect(md).toContain('```\nconst a = 1;'); expect(md).toContain('console.log(a);\n```'); }); it('无序与有序列表(一层)', () => { const md = htmlToMarkdown(`
  1. 第一步
  2. 第二步
`); expect(md).toMatch(/- 甲\n- 乙/s); expect(md).toMatch(/1\. 第一步\n2\. 第二步/s); }); it('blockquote 与 hr', () => { const md = htmlToMarkdown('
引言内容

'); expect(md).toContain('> 引言内容'); expect(md).toContain('---'); }); it('script/style/svg 等噪声整块剔除', () => { const md = htmlToMarkdown( 'noise

正文

', ); expect(md).not.toContain('alert'); expect(md).not.toContain('.x'); expect(md).toContain('正文'); }); it('表格降级为可读文本(不抛错、不留标签痕迹)', () => { const md = htmlToMarkdown('
AB
'); expect(md).toContain('A'); expect(md).toContain('B'); expect(md).not.toMatch(//); }); it('空输入返回空串', () => { expect(htmlToMarkdown('')).toBe(''); expect(htmlToMarkdown('')).toBe(''); }); });