import { execFileSync } from 'node:child_process'; import { MarkdownService } from '../../src/common'; describe('MarkdownService', () => { let service: MarkdownService; beforeEach(() => { service = new MarkdownService(); }); it('embeds, extracts and strips markdown source marker', () => { const markdown = '# 标题\n\n正文'; const html = service.embedSourceHtml('
正文
'); (service as any).sanitizeHtmlProcessorPromise = Promise.resolve({ process, }); const html = await service.sanitizeHtml( '正文
', ); expect(process).toHaveBeenCalledWith( '正文
', ); expect(html).toContain('正文
'); expect(html).not.toContain('onclick'); expect(html).not.toContain(''; const script = ` const { MarkdownService } = require('./src/common'); (async () => { const html = await new MarkdownService().sanitizeHtml(${JSON.stringify(argonHtml)}); process.stdout.write(JSON.stringify(html)); })().catch((error) => { process.exit(1); }); `; const output = execFileSync( process.execPath, [ '--experimental-vm-modules', '-r', 'ts-node/register', '-r', 'tsconfig-paths/register', '-e', script, ], { cwd: process.cwd(), encoding: 'utf8', env: { ...process.env, TS_NODE_TRANSPILE_ONLY: 'true', }, }, ); const html = JSON.parse(output) as string; expect(html).toContain('class="wp-block-code hljs-codeblock"'); expect(html).toContain('id="demo"'); expect(html).toContain('