AI_UIAutomation/tests/automation/rn_plugin.test.ts

74 lines
2.6 KiB
TypeScript

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;
}
});
});