@@ -247,22 +247,12 @@ export interface WaitForOptions {
247247 mutationObserverOptions ?: MutationObserverInit ;
248248}
249249
250- interface WaitFor {
251- < T > (
252- page : Page ,
253- asyncHookTracker : AsyncHookTracker ,
254- cb : ( ) => T | Promise < T > ,
255- { onTimeout, container, ...opts } : WaitForOptions ,
256- wrappedFunction : ( ...args : any ) => any ,
257- ) : Promise < T > ;
258- }
259-
260- export const waitFor : WaitFor = async (
261- page ,
262- asyncHookTracker ,
263- cb ,
264- { onTimeout, container, ...opts } ,
265- wrappedFunction ,
250+ export const waitFor = async < T > (
251+ page : Page ,
252+ asyncHookTracker : AsyncHookTracker ,
253+ cb : ( ) => T | Promise < T > ,
254+ { onTimeout, container, ...opts } : WaitForOptions ,
255+ wrappedFunction : ( ...args : any ) => any ,
266256) =>
267257 asyncHookTracker . addHook ( async ( ) => {
268258 const { port } = await createClientRuntimeServer ( ) ;
@@ -272,7 +262,10 @@ export const waitFor: WaitFor = async (
272262 // So we need a unique name for each variable
273263 const browserFuncName = `pleasantest_waitFor_${ waitForCounter } ` ;
274264
275- await page . exposeFunction ( browserFuncName , cb ) ;
265+ let returnValue : T | undefined ;
266+ await page . exposeFunction ( browserFuncName , async ( ) => {
267+ returnValue = await cb ( ) ;
268+ } ) ;
276269
277270 const evalResult = await page . evaluateHandle (
278271 // Using new Function to avoid babel transpiling the import
@@ -282,8 +275,8 @@ export const waitFor: WaitFor = async (
282275 `return import("http://localhost:${ port } /@pleasantest/dom-testing-library")
283276 .then(async ({ waitFor }) => {
284277 try {
285- const result = await waitFor(${ browserFuncName } , { ...opts, container })
286- return { success: true, result }
278+ await waitFor(${ browserFuncName } , { ...opts, container })
279+ return { success: true }
287280 } catch (error) {
288281 if (/timed out in waitFor/i.test(error.message)) {
289282 // Leave out stack trace so the stack trace is given from Node
@@ -298,12 +291,11 @@ export const waitFor: WaitFor = async (
298291 container ,
299292 ) ;
300293 const wasSuccessful = await evalResult . evaluate ( ( r ) => r . success ) ;
301- const result = await evalResult . evaluate ( ( r ) =>
302- r . success
303- ? r . result
304- : { message : r . result . message , stack : r . result . stack } ,
305- ) ;
306- if ( wasSuccessful ) return result ;
294+ if ( wasSuccessful ) return returnValue as T ;
295+ const result = await evalResult . evaluate ( ( r ) => ( {
296+ message : r . result . message ,
297+ stack : r . result . stack ,
298+ } ) ) ;
307299 const err = new Error ( result . message ) ;
308300 if ( result . stack ) err . stack = result . stack ;
309301 else removeFuncFromStackTrace ( err , asyncHookTracker . addHook ) ;
0 commit comments