@@ -657,3 +657,39 @@ test('basic fail', async ({ page }) => {
657657 await page . getByTestId ( 'test-tree' ) . getByText ( 'basic fail' ) . dblclick ( ) ;
658658 await expect ( page . getByRole ( 'tabpanel' , { name : 'Actions' } ) ) . toContainText ( 'Failed' ) ;
659659} ) ;
660+
661+ test ( 'should be able to create and dispose APIRequestContext inside Promise.all' , async ( { runUITest } ) => {
662+ const { page } = await runUITest ( {
663+ 'a.test.ts' : `
664+ import { test, request } from '@playwright/test';
665+ test('create api request contexts', async ({ }) => {
666+ await Promise.all(Array.from({ length: 100 }).map(async () => {
667+ let delay = Math.floor(Math.random() * 501);
668+ await new Promise(res => setTimeout(res, delay));
669+
670+ const apiContext = await request.newContext();
671+ delay = Math.floor(Math.random() * 501);
672+ await new Promise(res => setTimeout(res, delay));
673+ await apiContext.dispose();
674+ }));
675+ });
676+ ` ,
677+ } ) ;
678+
679+ await page . getByText ( 'create api request contexts' ) . dblclick ( ) ;
680+
681+ await expect ( page . getByTestId ( 'status-line' ) ) . toHaveText ( '1/1 passed (100%)' ) ;
682+
683+ await page . getByText ( 'Errors' , { exact : true } ) . click ( ) ;
684+ await expect ( page . locator ( '.tab-errors' ) ) . toHaveText ( 'No errors' ) ;
685+
686+ const listItem = page . getByTestId ( 'actions-tree' ) . getByRole ( 'treeitem' ) ;
687+ await expect (
688+ listItem ,
689+ 'action list'
690+ ) . toHaveText ( [
691+ / B e f o r e H o o k s [ \d . ] + m ? s / ,
692+ ...Array . from ( { length : 100 } ) . map ( ( ) => / C r e a t e r e q u e s t c o n t e x t [ \d . ] + m ? s / ) ,
693+ / A f t e r H o o k s [ \d . ] + m ? s / ,
694+ ] ) ;
695+ } ) ;
0 commit comments