From dbe98947bccff2408efeaf235b36725c26c64611 Mon Sep 17 00:00:00 2001 From: yu <1919727607@qq.com> Date: Thu, 5 Nov 2026 17:31:15 +0800 Subject: [PATCH] =?UTF-8?q?test:=20captcha=20=E7=AB=AF=E5=88=B0=E7=AB=AF?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=9B=BE=E5=85=A5=E5=BA=93=EF=BC=8C=E8=84=B1?= =?UTF-8?q?=E7=A6=BB=E5=A4=96=E9=83=A8=E8=B7=AF=E5=BE=84=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 5 张 PIL 生成的验证码图(共 30KB)入 __fixtures__/captcha - 测试路径从 D:/office-test2 硬编码改为 import.meta.dirname 仓库内解析 - fresh clone 后 npm test 即可跑全部 12 项(OCR 模型来自 npm 依赖) --- .../__fixtures__/captcha/captcha_0_3p5_q.png | Bin 0 -> 5497 bytes .../__fixtures__/captcha/captcha_1_12m7_q.png | Bin 0 -> 5274 bytes .../__fixtures__/captcha/captcha_2_6t4_q.png | Bin 0 -> 6320 bytes .../__fixtures__/captcha/captcha_3_15p28_q.png | Bin 0 -> 7477 bytes .../__fixtures__/captcha/captcha_4_9t9_q.png | Bin 0 -> 6209 bytes .../src/capabilities/captcha-caps.test.ts | 10 +++++++--- 6 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_0_3p5_q.png create mode 100644 packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_1_12m7_q.png create mode 100644 packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_2_6t4_q.png create mode 100644 packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_3_15p28_q.png create mode 100644 packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_4_9t9_q.png diff --git a/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_0_3p5_q.png b/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_0_3p5_q.png new file mode 100644 index 0000000000000000000000000000000000000000..4a479c64a0a7e54af7a59b00c848411606ca044f GIT binary patch literal 5497 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 literal 0 HcmV?d00001 diff --git a/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_2_6t4_q.png b/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_2_6t4_q.png new file mode 100644 index 0000000000000000000000000000000000000000..44af9a9deb064203e06cc9713de6d1be58ebe5b8 GIT binary patch literal 6320 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 literal 0 HcmV?d00001 diff --git a/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_3_15p28_q.png b/packages/rpa-core/src/capabilities/__fixtures__/captcha/captcha_3_15p28_q.png new file mode 100644 index 0000000000000000000000000000000000000000..b347d0102fdc75506929f1a67c4dd00deb11a10e GIT binary patch literal 7477 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 {}, vars: {}, evidenceDir: "D:/office-test2/ocr-test" } as unknown as RunContext; +// 测试图随仓库走(__fixtures__/captcha,PIL 生成),真实 OCR 模型来自 npm 依赖 +const fixturesDir = path.join(import.meta.dirname, "__fixtures__", "captcha"); +const fixture = (name: string) => path.join(fixturesDir, `${name}.png`); +const ctx = { signal: new AbortController().signal, log: () => {}, vars: {}, evidenceDir: fixturesDir } as unknown as RunContext; const node: FlowNode = { id: "smoke", componentId: "smoke", position: { x: 0, y: 0 }, values: {}, options: {} }; describe("parseCalculation 解析层(纯逻辑)", () => { @@ -36,7 +40,7 @@ describe("parseCalculation 解析层(纯逻辑)", () => { }); }); -describe.skipIf(!existsSync("D:/office-test2/ocr-test/captcha_0_3p5_q.png"))("OCR_CalculationCode 端到端(真实模型)", () => { +describe.skipIf(!existsSync(fixture("captcha_0_3p5_q")))("OCR_CalculationCode 端到端(真实模型)", () => { const cases: Array<[string, string]> = [ ["captcha_0_3p5_q", "8"], ["captcha_1_12m7_q", "5"], @@ -48,7 +52,7 @@ describe.skipIf(!existsSync("D:/office-test2/ocr-test/captcha_0_3p5_q.png"))("OC it(`${file} -> ${expected}`, async () => { const handler = getHandler("OCR_CalculationCode"); expect(handler).toBeTruthy(); - const out = await handler!(ctx, node, { path: `D:/office-test2/ocr-test/${file}.png` }, {} as CatalogComponent); + const out = await handler!(ctx, node, { path: fixture(file) }, {} as CatalogComponent); console.log(`[${file}]`, String(out)); expect(String(out)).toBe(expected); }, 300000);