import { describe, it, beforeAll, afterAll, expect } from 'vitest'; import { TestReporter } from '../../utils/test-reporter'; import { getTicketRnPlugins, resolveTicketId } from '../../utils/common'; import * as dotenv from 'dotenv'; import * as path from 'path'; dotenv.config({ path: path.resolve(__dirname, '../../.env') }); /** * 必测项「获取RN插件」—— 读取 Zendesk 工单里 app 自动上报的 RN 插件包版本(Bundle_Version)。 * * 纯 API 用例,不依赖设备 driver。工单号是**变量**,不写死: * ① 入参/env ZENDESK_TICKET_ID ② 上游用例(feedback 提交)setSharedTicketId() 写的共享文件。 * 无工单号或未配 Zendesk 连接时 → SKIP(便于无人值守时不阻塞)。 * * ONES 锚点:插件热更 48734(库 EPfZfC9Y / 模块 其他功能 Eeme1qVk)。可用 env ONES_RN_PLUGIN 覆盖。 */ const ONES = `[P0][ONES:${process.env.ONES_RN_PLUGIN || '48734'}]`; describe('【平台】插件热更 - 获取RN插件版本(工单 Bundle_Version)', () => { let reporter: TestReporter; beforeAll(() => { reporter = new TestReporter('RN_Plugin', 'API'); }); afterAll(() => { reporter.generate(); }); it(`${ONES} 获取RN插件版本`, async () => { const start = Date.now(); const name = `${ONES} 获取RN插件版本`; // 前置:工单号 + Zendesk 连接;缺任一则 SKIP(无人值守安全) let ticketId: string; try { ticketId = resolveTicketId(process.env.ZENDESK_TICKET_ID); } catch (e: any) { console.log('跳过:', e.message); reporter.record(name, 'SKIP', Date.now() - start, e.message); return; } if (!process.env.ZENDESK_DOMAIN || !process.env.ZENDESK_TOKEN) { const msg = '跳过:未配置 ZENDESK_DOMAIN/ZENDESK_TOKEN'; console.log(msg); reporter.record(name, 'SKIP', Date.now() - start, msg); return; } try { const info = await getTicketRnPlugins(ticketId); // 断言:工单评论里取到了 Bundle_Version,且解析出至少一个 RN 插件模块 expect(info.bundleRaw).not.toBeNull(); const modules = Object.keys(info.bundle); expect(modules.length).toBeGreaterThan(0); const detail = [ `ticket=${info.ticketId}`, `App=${info.appVersion ?? '-'}`, `JS=${info.jsVersion ?? '-'}`, `RN插件(${modules.length}): ` + modules.map((m) => `${m}:${info.bundle[m]}`).join(' / '), ].join(' | '); console.log(detail); reporter.record(name, 'PASS', Date.now() - start, detail); } catch (e: any) { reporter.record(name, 'FAIL', Date.now() - start, e.message); throw e; } }); });