diff --git a/packages/core/src/runtime/worker/index.ts b/packages/core/src/runtime/worker/index.ts index 9d1a8624..40bf4c85 100644 --- a/packages/core/src/runtime/worker/index.ts +++ b/packages/core/src/runtime/worker/index.ts @@ -65,7 +65,11 @@ const preparePool = async ({ const cleanupFns: (() => MaybePromise)[] = []; - const { rpc } = createRuntimeRpc(createForksRpcOptions()); + const originalConsole = global.console; + + const { rpc } = createRuntimeRpc(createForksRpcOptions(), { + originalConsole, + }); const { runtimeConfig: { globals, diff --git a/packages/core/src/runtime/worker/rpc.ts b/packages/core/src/runtime/worker/rpc.ts index 87834a55..ddb6415c 100644 --- a/packages/core/src/runtime/worker/rpc.ts +++ b/packages/core/src/runtime/worker/rpc.ts @@ -1,7 +1,7 @@ import v8 from 'node:v8'; import { type BirpcOptions, type BirpcReturn, createBirpc } from 'birpc'; import type { TinypoolWorkerMessage } from 'tinypool'; -import type { RuntimeRPC, ServerRPC } from '../../types'; +import type { RuntimeRPC, ServerRPC, TestResult } from '../../types'; export type WorkerRPC = BirpcReturn; @@ -43,8 +43,37 @@ export function createRuntimeRpc( BirpcOptions, 'on' | 'post' | 'serialize' | 'deserialize' >, + { + originalConsole, + }: { + originalConsole: Console; + }, ): { rpc: WorkerRPC } { - const rpc = createBirpc({}, options); + const rpc = createBirpc( + {}, + { + ...options, + onTimeoutError: (functionName, error) => { + switch (functionName) { + case 'onTestCaseResult': { + const caseResult = error[0] as unknown as TestResult; + console.error( + `[Rstest] timeout on calling "onTestCaseResult" rpc method (Case: "${caseResult.name}", Result: "${caseResult.status}")`, + ); + return true; + } + case 'onConsoleLog': { + originalConsole.error( + `[Rstest] timeout on calling "onConsoleLog" rpc method (Original log: ${error[0].content})`, + ); + return true; + } + default: + return false; + } + }, + }, + ); return { rpc,