fix: switch miniprogram channel by env version

This commit is contained in:
kdletters
2026-06-04 23:52:59 +08:00
parent dd5861d5f5
commit b19a3e4231
4 changed files with 132 additions and 9 deletions

View File

@@ -25,6 +25,9 @@ type MiniProgramPage = {
function createWxMock() {
return {
getAccountInfoSync: vi.fn(() => ({
miniProgram: { envVersion: 'release' },
})),
getStorageSync: vi.fn(() => ''),
getSystemInfoSync: vi.fn(() => ({ platform: 'ios' })),
login: vi.fn(),
@@ -57,6 +60,8 @@ function loadWebViewPage(
if (requestPath === '../../config') {
return {
API_BASE_URL: 'https://www.genarrative.world/',
DEV_API_BASE_URL: 'https://dev.genarrative.world/',
DEV_WEB_VIEW_ENTRY_URL: 'https://dev.genarrative.world/',
MINI_PROGRAM_APP_ID: 'wx-test-app',
MINI_PROGRAM_ENV: 'release',
WEB_VIEW_ENTRY_URL: 'https://www.genarrative.world/',
@@ -182,6 +187,51 @@ describe('mini-program web-view auth page', () => {
);
});
test('体验版自动切到 dev 子域名并透传 trial 环境', async () => {
const wxMock = createWxMock();
wxMock.getAccountInfoSync.mockReturnValue({
miniProgram: { envVersion: 'trial' },
});
const page = loadWebViewPage(wxMock);
await page.onLoad({});
expect(page.data.webViewUrl).toBe(
'https://dev.genarrative.world/?clientType=mini_program&clientRuntime=wechat_mini_program&miniProgramEnv=trial',
);
});
test('开发版自动切到 dev 子域名并把 develop 规整为 dev', async () => {
const wxMock = createWxMock();
wxMock.getAccountInfoSync.mockReturnValue({
miniProgram: { envVersion: 'develop' },
});
wxMock.login.mockImplementation(({ success }) => {
success({ code: 'wx-login-code' });
});
wxMock.request.mockImplementation(({ success }) => {
success({
statusCode: 200,
data: {
token: 'jwt-pending-wechat',
bindingStatus: 'pending_bind_phone',
},
});
});
const page = loadWebViewPage(wxMock);
await page.onLoad({ authAction: 'login', returnTo: 'previous' });
expect(wxMock.request).toHaveBeenCalledWith(
expect.objectContaining({
url: 'https://dev.genarrative.world/api/auth/wechat/miniprogram-login',
header: expect.objectContaining({
'x-mini-program-env': 'dev',
}),
}),
);
});
test('onShow 二次检查支付结果并写回 web-view hash', () => {
const wxMock = createWxMock();
wxMock.getStorageSync.mockImplementation((key) =>