69 行
2.8 KiB
TypeScript
69 行
2.8 KiB
TypeScript
// 已读取AGENTS.md
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
/**
|
|
* 第一百一十九批闸门:小程序全页面分享到好友与朋友圈闸门
|
|
*/
|
|
describe('第一百一十九批全页面分享到好友与朋友圈闸门', () => {
|
|
const rootDir = path.resolve(__dirname, '../../');
|
|
const shareJsPath = path.join(rootDir, 'pwuniapp/common/share.js');
|
|
const mainJsPath = path.join(rootDir, 'pwuniapp/main.js');
|
|
|
|
it('pwuniapp/common/share.js 必须存在并提供完备的分享生命周期与工具函数', () => {
|
|
expect(fs.existsSync(shareJsPath)).toBe(true);
|
|
const content = fs.readFileSync(shareJsPath, 'utf-8');
|
|
expect(content).toContain('onShareAppMessage');
|
|
expect(content).toContain('onShareTimeline');
|
|
expect(content).toContain('showShareMenu');
|
|
expect(content).toContain('shareAppMessage');
|
|
expect(content).toContain('shareTimeline');
|
|
expect(content).toContain('export function useShare');
|
|
expect(content).toContain('export const shareMixin');
|
|
expect(content).toContain('export function buildSharePath');
|
|
expect(content).toContain('export function buildTimelineQuery');
|
|
});
|
|
|
|
it('main.js 必须全局混入 shareMixin 作为全页面兜底', () => {
|
|
const content = fs.readFileSync(mainJsPath, 'utf-8');
|
|
expect(content).toContain("import { shareMixin } from './common/share.js'");
|
|
expect(content).toContain('app.mixin(shareMixin)');
|
|
});
|
|
|
|
it('核心公共与业务页面均需显式配置 useShare 并具备邀请分销与上下文参数', () => {
|
|
const keyPages = [
|
|
'pwuniapp/pages/index/index.vue',
|
|
'pwuniapp/pages/activity/list.vue',
|
|
'pwuniapp/pages/activity/detail.vue',
|
|
'pwuniapp/pages/activity/my-ticket.vue',
|
|
'pwuniapp/pages/activity/create.vue',
|
|
'pwuniapp/pages/expert/detail.vue',
|
|
'pwuniapp/pages/expert/apply.vue',
|
|
'pwuniapp/pages/expert/hall.vue',
|
|
'pwuniapp/pages/expert/radar.vue',
|
|
'pwuniapp/pages/expert/workspace.vue',
|
|
'pwuniapp/pages/community/index.vue',
|
|
'pwuniapp/pages/community/detail.vue',
|
|
'pwuniapp/pages/user/index.vue',
|
|
'pwuniapp/pages/user/promote.vue',
|
|
'pwuniapp/pages/user/coupons.vue',
|
|
'pwuniapp/pages/user/help-faq.vue',
|
|
'pwuniapp/pages/common/protocol.vue',
|
|
'pwuniapp/pages/order/list.vue',
|
|
];
|
|
|
|
for (const relPath of keyPages) {
|
|
const fullPath = path.join(rootDir, relPath);
|
|
expect(fs.existsSync(fullPath)).toBe(true);
|
|
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
expect(content).toContain("useShare");
|
|
}
|
|
});
|
|
|
|
it('分享代码及所有更新页面必须严格遵循零 Emoji 门禁规范', () => {
|
|
const content = fs.readFileSync(shareJsPath, 'utf-8');
|
|
const emojiRegex = /[\u{1F300}-\u{1F9FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/u;
|
|
expect(emojiRegex.test(content)).toBe(false);
|
|
});
|
|
});
|