diff --git a/common/changes/@coze/taro-api/feat-taro-multi_2024-12-31-02-23.json b/common/changes/@coze/taro-api/feat-taro-multi_2024-12-31-02-23.json new file mode 100644 index 00000000..90a9ddb0 --- /dev/null +++ b/common/changes/@coze/taro-api/feat-taro-multi_2024-12-31-02-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@coze/taro-api", + "comment": "weapp", + "type": "patch" + } + ], + "packageName": "@coze/taro-api", + "email": "yjfengwen@foxmail.com" +} diff --git a/packages/coze-taro/test/api.spec.ts b/packages/coze-taro/test/api.spec.ts index 21e40e72..48b8894a 100644 --- a/packages/coze-taro/test/api.spec.ts +++ b/packages/coze-taro/test/api.spec.ts @@ -1,17 +1,12 @@ import { CozeAPI } from '../src/api'; -import { ttCreateEventSource } from './stubs'; - -vi.stubGlobal('tt', { - createEventSource: ttCreateEventSource, -}); vi.mock('../src/mixins/platform', async () => { - const mod = await vi.importActual('../src/mixins/platform.tt'); + const mod = await vi.importActual('../src/mixins/platform.weapp'); return mod; }); vi.mock('../src/event-source/index', async () => { - const mod = await vi.importActual('../src/event-source/index.tt'); + const mod = await vi.importActual('../src/event-source/index.weapp'); return mod; }); @@ -40,6 +35,11 @@ describe('CozeAPI - mini', () => { caches.push(chunk); } expect(mockOnBeforeAPICall).toHaveBeenCalledOnce(); + + await cozeApi.workflows.runs.create({ + workflow_id: 'nonStreaming', + }); + expect(mockOnBeforeAPICall).toHaveBeenCalledTimes(2); }); it('should refresh token', async () => { diff --git a/packages/coze-taro/test/request.spec.ts b/packages/coze-taro/test/request.spec.ts index 4104164e..ff27b573 100644 --- a/packages/coze-taro/test/request.spec.ts +++ b/packages/coze-taro/test/request.spec.ts @@ -1,16 +1,6 @@ import { type Deferred } from '../src/helpers/async'; import { AbortController } from '../src/helpers/abortcontroller'; import { sendRequest } from '../src/event-source/request'; -import { ttCreateEventSource } from './stubs'; - -vi.stubGlobal('tt', { - createEventSource: ttCreateEventSource, -}); - -vi.mock('../src/event-source/index', async () => { - const mod = await vi.importActual('../src/event-source/index.tt'); - return mod; -}); describe('SSERequest', () => { beforeEach(() => { @@ -49,6 +39,12 @@ describe('SSERequest', () => { deferred: null, error: null, }; + + const unhandle = () => { + // donothing + }; + process.on('unhandledRejection', unhandle); + const controller = new AbortController(); sendRequest({ url: 'xx', signal: controller.signal }, result); @@ -56,7 +52,7 @@ describe('SSERequest', () => { controller.abort(); }, 5); - vi.runAllTimersAsync(); + await vi.runAllTimersAsync(); await expect(result.deferred?.promise).rejects.toThrowError(); expect(result.done).toBe(true); }); diff --git a/packages/coze-taro/test/setup.ts b/packages/coze-taro/test/setup.ts index 442fcb9c..d2ad378d 100644 --- a/packages/coze-taro/test/setup.ts +++ b/packages/coze-taro/test/setup.ts @@ -1,13 +1,14 @@ -import { Events, taroStreamingRequest, taroUploadFile } from './stubs'; +import { Events, taroRequest, taroUploadFile } from './stubs'; vi.doMock('@tarojs/taro', () => ({ default: { Events, - request: taroStreamingRequest, + request: taroRequest, uploadFile: taroUploadFile, }, Events, - getEnv: () => 'TT', + request: taroRequest, + getEnv: () => 'WEAPP', ENV_TYPE: { WEB: 'WEB', }, diff --git a/packages/coze-taro/test/stubs.ts b/packages/coze-taro/test/stubs.ts index 5d345779..7dc9b394 100644 --- a/packages/coze-taro/test/stubs.ts +++ b/packages/coze-taro/test/stubs.ts @@ -194,18 +194,30 @@ export const ttCreateEventSource: TTCreateEVentSource = ({ data, timeout }) => { return task; }; -export const taroStreamingRequest = ({ +export const taroRequest = ({ + data, + timeout, fail, success, }: { + data?: Record; + timeout?: number; fail: (err: { errMsg: string }) => void; success: (res: { statusCode: number; errMsg?: string }) => void; }) => { + if (data?.workflow_id === 'nonStreaming') { + return Promise.resolve(); + } + const task = new TaroStreamingTask(); let index = 0; const mockReceiveMessage = () => { - if (index < mockWorkflowMessages.length && !task.closed) { + if (data && data.workflow_id && data.workflow_id === 'fail') { + setTimeout(() => { + fail({ errMsg: 'fail' }); + }, 10); + } else if (index < mockWorkflowMessages.length && !task.closed) { setTimeout(() => { if (index === 2) { // mock long message split @@ -234,6 +246,11 @@ export const taroStreamingRequest = ({ setTimeout(() => { task.events.trigger('headersReceived'); mockReceiveMessage(); + if (timeout) { + setTimeout(() => { + task.abort(); + }, timeout); + } }, 0); return task;